Обработка исключений другого потока

218
06 января 2018, 00:16

В 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 не удается отловить исключения из другого потока...

Answer 1

Никак. Исключения, происходящие в потоке, должны быть отловлены в этом же потоке, иначе приложение завершится аварийно.

Если вы перейдёте на Task и async/await, то там, да, исключения доставляются тем, кто получает результат Task'а.

Вы используете переменные (например, StatusThread) из нескольких потоков без синхронизации. Это неверно, так делать нельзя.

Answer 2

Можно пробовать отлавливать ошибки в дочернем процессе, но вместо того, чтобы их обрабатывать, запихивать в глобальную переменную и прерывать процесс, а в главном процессе уже проводить обработку.

READ ALSO
Импорт и экспорт в xml , json, yml [требует правки]

Импорт и экспорт в xml , json, yml [требует правки]

Необходимо экспортировать и импортировать в три формата (xml , json, yml)Как лучше это сделать? Помогите с примером и советом

177
Как передать в параметр метода метод - Unity

Как передать в параметр метода метод - Unity

Есть Скрипт_1 - SoundManagercs, в нем содержится:

221
Не воспроизводится музыка - Unity

Не воспроизводится музыка - Unity

При запуске игры, через 20 секунд включается панель, и вызывается метод, в этом методе запускается музыкаПроблема: после запуска метода, музыка...

316