Metode paling sederhana untuk berbagi data di antara utas yang berbeda adalah shared data
sebagai berikut (beberapa adalah kode pseudo):
class MyThread
{
public string SharedData;
public void Worker()
{
...lengthy action, infinite loop, etc...
SharedData = "whatever";
...lengthy action...
return;
}
}
class Program
{
static void Main()
{
MyThread m = new MyThread();
Thread WorkerThread = new Thread(m.Worker);
WorkerThread.Start();
loop//or e.g. a Timer thread
{
f(m.SharedData);
}
return;
}
}
Anda dapat membaca tentang metode ini dalam pengantar yang bagus tentang multithreading ini , namun, saya lebih suka membaca tentang ini di O'Reilly book C# 3.0 in a nutshell
, oleh saudara-saudara Albahari (2007), yang juga dapat diakses secara bebas di Google Buku, seperti versi buku yang lebih baru, karena ini juga mencakup kumpulan thread, thread latar depan versus latar belakang, dll., dengan kode contoh yang bagus dan sederhana. (Penafian: Saya memiliki salinan buku ini yang sudah usang)
Jika Anda membuat aplikasi WinForms, penggunaan data bersama sangat berguna, karena kontrol WinForm tidak aman untuk thread. Menggunakan callback untuk meneruskan data dari thread pekerja kembali ke kontrol WinForm, thread UI utama memerlukan kode jelek Invoke()
untuk membuat kontrol thread tersebut aman. Menggunakan data bersama sebagai gantinya, dan single-threaded System.Windows.Forms.Timer
, dengan waktu singkat Interval
katakanlah 0,2 detik, Anda dapat dengan mudah mengirim informasi dari thread pekerja ke kontrol tanpa Invoke
.