Найпростіший метод обміну даними між різними потоками полягає 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
.