Я бы порекомендовал сделать асинхронный ввод-вывод. Это немного проще в настройке, и вам не нужно создавать новые темы самостоятельно.
Асинхронное программирование - это то, где у вас есть, например, поток файлов, в который вы хотите записать, но не хотите ждать его завершения. Возможно, вы захотите получить уведомление о его завершении, но не хотите ждать.
То, что вы делаете, - это использование BeginWrite / BeginRead и EndWrite / EndRead , доступных в классе Stream.
В вашем методе вы начинаете с вызова BeginWrite со всеми данными, которые вы хотите записать, а также передаете функцию обратного вызова. Эта функция будет вызываться после завершения BeginWrite.
Внутри функции обратного вызова вы вызываете EndWrite, очищаете поток и проверяете ошибки.
BeginWrite не блокируется, что означает, что если он вызывается из обработчика событий, этот поток может завершить этот обработчик и продолжить обработку большего количества событий (например, других событий графического интерфейса).
using System;
using System.IO;
using System.Text;
class Program
{
private static FileStream stream;
static void Main(string[] args)
{
stream = new FileStream("foo.txt",
FileMode.Create,
FileAccess.Write);
const string mystring = "Foobarlalala";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(mystring);
Console.WriteLine("Started writing");
stream.BeginWrite(data, 0, data.Length, callback, null);
Console.WriteLine("Writing dispatched, sleeping 5 secs");
System.Threading.Thread.Sleep(5000);
}
public static void callback(IAsyncResult ia)
{
stream.EndWrite(ia);
Console.WriteLine("Finished writing");
}
}
}
Сон очень важен, потому что поток, который пишет вещи, будет уничтожен, если основной поток будет уничтожен. Это не проблема в приложении с графическим интерфейсом, только здесь, в этом небольшом примере.
MSDN имеет довольно хороший обзор о том, как написать этот материал, а также некоторые хорошие статьи в целом об асинхронном программировании в случае, если вы выберете фоновщика или ThreadPool .