В ViewModel
имеется команда, которая запускает загрузку данных с порта и расшифровку их:
void ReadData_Execute(object parameter)
{
ReadingData.StartLoadData();
DecodData.StartDecod();
}
Вот код StartLoad
:
public static void StartLoadData()
{
if (ThreadLoad != null)
ThreadLoad = null;
StatusThread = true;
ThreadLoad.Start();
}
Свойство ThreadLoad
:
private static Thread ThreadLoad
{
get
{
if (_threadLoad == null)
_threadLoad = new Thread(LoadData);
return _threadLoad;
}
set { _threadLoad = value; }
}
Вот метод LoadData
, который вызывается в этом потоке:
private static void LoadData()
{
while (StatusThread)
{
WriteData.WritingData.WriteCommand();
byte[] command = CreatePackage(InitNumber);
byte[] data = CPort.ReadData(command);
//добавить проверку контрольной суммы.
ByteInformation.AddByte(data, InitNumber);
InitNumber += 25;
}
}
Вопрос: как перехватывать исключения, которые возникают в методе LoadData
?
В основном ошибки должны возникать с портом, но обычными try
/catch
не удается отловить исключения из другого потока...
Никак. Исключения, происходящие в потоке, должны быть отловлены в этом же потоке, иначе приложение завершится аварийно.
Если вы перейдёте на Task
и async/await, то там, да, исключения доставляются тем, кто получает результат Task
'а.
Вы используете переменные (например, StatusThread
) из нескольких потоков без синхронизации. Это неверно, так делать нельзя.
Можно пробовать отлавливать ошибки в дочернем процессе, но вместо того, чтобы их обрабатывать, запихивать в глобальную переменную и прерывать процесс, а в главном процессе уже проводить обработку.
Необходимо экспортировать и импортировать в три формата (xml , json, yml)Как лучше это сделать? Помогите с примером и советом
При запуске игры, через 20 секунд включается панель, и вызывается метод, в этом методе запускается музыкаПроблема: после запуска метода, музыка...