Найпростіший метод обміну даними між різними потоками полягає shared dataв наступному (дещо є псевдокодом):
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;
}
}
Ви можете прочитати про цей метод у цьому приємному вступі про багатопотоковість , однак я вважав за краще читати про це у O'Reilly book C# 3.0 in a nutshellбратах Альбахарі (2007), який також є у вільному доступі в Книгах Google, як і в новій версії книги, тому що він також охоплює об'єднання ниток, передній план та фонові нитки тощо тощо, з приємним та простим прикладом коду. (Відмова: Я маю зношену копію цієї книги)
Якщо ви робите додаток WinForms, використання спільних даних особливо зручно, оскільки елементи керування WinForm не є безпечними для потоків. Використовуючи зворотний виклик для передачі даних з робочого потоку назад до елемента WinForm, для основного потоку інтерфейсу потрібен некрасивий код, Invoke()щоб зробити цей потік управління безпечним. Використовуючи натомість загальнодоступні дані та однопотокові System.Windows.Forms.Timer, за короткий час Intervalсказати 0,2 секунди, ви можете легко надсилати інформацію з робочого потоку в елемент управління без Invoke.