共用方式為


Managed 程式庫執行緒考慮

下列平板電腦執行緒考慮是受管理程式庫專屬的。

Thread-Safety

平板電腦平臺的受控程式庫類別通常不是安全線程。 下列集合是成員層級的執行緒安全集合;不過,如果另一個執行緒同時在集合上運作,這些集合並不保證列舉值受到保護:

STA 和 MTA 應用程式

使用 Microsoft Visual Studio .NET 中包含的精靈所建立的受控應用程式預設為單線程 Apartment (STA) 。 您可以在應用程式的進入點上設定 STA 執行緒或多執行緒 Apartment (MTA) 執行緒屬性,以變更應用程式的 Apartment。

如果您的應用程式是在 MTA 中執行,您必須撰寫安全線程的程式碼;不過,藉由這樣做,您可以改善特定事件處理效能問題。

如需 STA 執行緒和 MTA 執行緒屬性的詳細資訊,請參閱 STAThreadAttribute 類別和 MTAThreadAttribute 類別。

Windows Forms執行緒考慮

InkPictureInkEdit控制項會延伸Windows Forms控制項。 Windows Forms控制項使用單一線程 Apartment (STA) 模型,因為Windows Forms是以原本為單一執行緒的原生 Win32 視窗為基礎。 在 Managed 程式碼中,筆跡控制項應該建立在與表單主執行緒相同的執行緒中。

在 STA 應用程式中,某些事件發生在應用程式使用者介面 (UI) 執行緒以外的執行緒上。 從平板電腦事件處理常式內呼叫任何Windows Forms物件或控制項,包括InkPictureInkEdit控制項時,請使用物件或控制項的繼承Control.Invoke方法。 InvokeRequired屬性繼承自 Control 類別,可用來判斷這是否必要。

例如,在 辨識 事件的下列事件處理常式中, 會測試 InvokeRequired 屬性,如果 為 TRUE,則會從使用者介面執行緒重新叫用事件處理常式。

void recoContext_Recognition(object sender, 
        RecognizerContextRecognitionEventArgs e)
{
    if (InvokeRequired)
    {
        Invoke( new RecognizerContextRecognitionEventHandler(  
                     recoContext_Recognition ),
                    new object[] { sender, e } );
        return;
    }
     // Use the recognition result here.
}

如果您將 UserControl 放在瀏覽器中的 awebpage, (看到 Web 控制項) ,則會以 STA 應用程式的形式執行。 對於智慧型用戶端應用程式, (請參閱 No Touch Deployment) ,開發人員可以完全控制 ApartmentState。 (預設值通常是 STA,但可能為 MTA,視您的 CLR 版本而定。) 針對涉及 RealTimeStylus的執行緒問題,請參閱 StylusInput API 的執行緒考慮

如需從 MTA 應用程式呼叫Windows Forms的詳細資訊,請參閱多執行緒Windows Forms控制範例

剪貼簿考慮

剪貼簿物件只適用于 STA 執行緒。 嘗試從不是 STA 的執行緒複製或貼上剪貼簿時,您會收到 ThreadStateException。 如果您的應用程式是 MTA,請建立 STA 執行緒來處理剪貼簿的方法呼叫,以及應用程式的一些其他 UI 層面。

事件處理常式內的例外狀況

無法在平板電腦事件處理常式內擲回例外狀況。 例如,如果 Tablet PC 物件或集合的事件處理常式委派有三個已註冊的處理常式,而第一個處理常式擲回例外狀況,則會發生下列順序:

  1. 第一個處理常式會結束。
  2. 例外狀況遺失。
  3. 不會叫用其餘處理常式。

處置物件和控制項

若要避免記憶體流失,您必須在物件或控制項超出範圍之前,明確呼叫任何平板電腦物件或控制項上的 Dispose 方法。

若要改善應用程式中的效能,請在不再需要物件或控制項時手動處置實作 Dispose 方法的任何 Tablet PC 物件或控制項。

手寫筆Input API

如需 RealTimeStylus 物件的執行緒考慮和手寫筆Input 應用程式程式設計介面的相關資訊, (API) 請參閱 手寫筆Input API 的執行緒考慮