Pertimbangan Penguliran pada Pustaka Terkelola

Pertimbangan penanganan utas PC Tablet berikut ini khusus untuk Pustaka Dikelola.

Thread-Safety

Kelas Pustaka Terkelola Platform PC Tablet umumnya tidak aman untuk alur. Koleksi berikut aman secara thread-safe di level anggota; namun, koleksi ini tidak menjamin bahwa enumerator dilindungi jika utas lain mengakses koleksi secara bersamaan:

Aplikasi STA dan MTA

Aplikasi terkelola yang dibuat dengan menggunakan wizard yang terkandung dalam Microsoft Visual Studio .NET adalah apartemen berulir tunggal (STA) secara default. Anda dapat mengubah apartemen untuk aplikasi Anda dengan mengatur atribut utas STA atau multithreaded apartment (MTA) pada titik masuk aplikasi Anda.

Jika aplikasi Anda berjalan dalam MTA, Anda harus menulis kode aman utas; namun, dengan melakukannya, Anda dapat meningkatkan masalah performa penanganan peristiwa tertentu.

Untuk informasi selengkapnya tentang atribut STAThread dan MTAThread, lihat kelas STAThreadAttribute dan kelas MTAThreadAttribute.

Pertimbangan Utas Formulir Windows

Kontrol InkPicture dan InkEdit memperluas kontrol Windows Forms. Kontrol Windows Forms menggunakan model apartemen berulir tunggal (STA) karena Windows Forms didasarkan pada jendela Win32 asli yang secara inheren berulir tunggal. Dalam kode terkelola, kontrol pena harus dibuat dalam thread yang sama dengan thread utama untuk formulir.

Dalam aplikasi STA, peristiwa tertentu terjadi pada utas selain utas antarmuka pengguna (UI) aplikasi. Saat memanggil objek atau kontrol Windows Forms apa pun, termasuk kontrol InkPicture dan InkEdit, dari dalam penangan acara PC Tablet, gunakan metode warisan Control.Invoke dari objek atau kontrol tersebut. Properti InvokeRequired, yang diwarisi dari kelas Kontrol, dapat digunakan untuk menentukan apakah ini diperlukan.

Misalnya, dalam penanganan aktivitas berikut untuk peristiwa Pengenalan, properti InvokeRequired diuji dan jika TRUE, penanganan aktivitas dipanggil kembali dari utas antarmuka pengguna.

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

Jika Anda menempatkan UserControl ke halaman web di peramban (lihat Web Controls), maka itu dijalankan sebagai aplikasi STA. Untuk aplikasi klien pintar (lihat Penyebaran Tanpa Sentuhan ), pengembang memiliki kontrol penuh atas ApartmentState. (Defaultnya umumnya STA, tetapi mungkin MTA, tergantung pada versi CLR Anda.) Untuk isu threading yang melibatkan RealTimeStylus, lihat pada bagian Pertimbangan Threading untuk API StylusInput.

Untuk informasi selengkapnya tentang memanggil Formulir Windows dari aplikasi MTA, lihat Contoh Kontrol Formulir Windows Multithreaded.

Pertimbangan Clipboard

Objek Clipboard hanya berfungsi jika berasal dari utas STA. Saat Anda mencoba menyalin atau menempel dari Clipboard pada utas yang bukan STA, Anda akan mendapatkan ThreadStateException. Jika aplikasi Anda menggunakan model threading MTA, buatlah utas STA untuk menangani panggilan metode Clipboard dan beberapa aspek UI lainnya dari aplikasi Anda.

Pengecualian dalam Penanganan Kejadian

Pengecualian tidak dapat dilemparkan dari dalam penanganan aktivitas PC Tablet. Misalnya, jika delegasi penangan acara untuk objek atau koleksi Tablet PC memiliki tiga penangan terdaftar dan yang pertama melemparkan pengecualian, maka urutan berikut terjadi:

  1. Handler pertama keluar.
  2. Pengecualian hilang.
  3. Pengendali yang tersisa tidak dieksekusi.

Membuang Objek dan Kontrol

Untuk menghindari kebocoran memori, Anda harus secara eksplisit memanggil metode Buang pada objek atau kontrol PC Tablet mana pun yang telah dilampirkan penangan peristiwa sebelum objek atau kontrol berada di luar jangkauan.

Untuk meningkatkan performa dalam aplikasi Anda, buang objek atau kontrol PC Tablet apa pun secara manual yang mengimplementasikan metode Buang ketika objek atau kontrol tidak lagi diperlukan.

API StylusInput

Untuk informasi tentang pertimbangan penguliran untuk objek RealTimeStylus dan antarmuka pemrograman aplikasi StylusInput (API), lihat pada Pertimbangan Penguliran untuk API StylusInput.