У меня есть приложение Winforms, которое работает нормально .. использую BackgroundWorkerThread для управления удобством использования графического интерфейса пользователя при обработке последовательных данных на устройстве.
Работает нормально.
Теперь ядобавление нового метода и копирование того, что я делал в других формах.Но я получаю исключение кросс-потока.
Я объявляю свой BWT следующим образом:
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += DownloadGpsDataFromDevice;
bw.WorkerReportsProgress = true;
bw.RunWorkerAsync();
Затем у меня есть метод, отлаженный как этот, который работает в фоновом режиме:
private void DownloadGpsDataFromDevice(object sender, DoWorkEventArgs e)
{
_performScreenUpdate = true;
tsStatus.Text = "Downloading GPS Data...";
Invalidate();
Refresh();
Common.WriteLog("Extracting raw GPS data. Sending LL.");
ReplyString raw = DeviceServices.ExecuteCommand("$LL");
DeviceServices.ExecuteCommand ("$ LL");это бит, который делает работу, но я получаю исключение в предыдущей строке, где я регистрируюсь в текстовом файле.Теперь, это заставляет вас беспокоиться - запись в файл.Тем не менее, я делал это тысячи раз в другом BWT.
Я сделал поток записи безопасным.Вот мой метод Common.WriteLog:
public static void WriteLog(string input)
{
lock (_lockObject)
{
WriteLogThreadSafe(input);
}
}
private static void WriteLogThreadSafe(string input)
{
Directory.CreateDirectory(LogFilePath);
StreamWriter w = File.AppendText(LogFilePath + @"\" + LogFileName);
try
{
w.WriteLine(string.Format("{0}\t{1}", DateTime.Now, input));
}
catch (Exception e)
{
System.Console.WriteLine("Error writing to log file!");
System.Console.WriteLine("Tried to write: [" + input + "]");
System.Console.WriteLine("Failed with error: [" + e.Message + "]");
}
finally
{
w.Close();
}
}
Это работало целую вечность.Я не верю, что ошибка есть.Я думаю, я просто что-то упускаю во время разговора?