У меня есть форма, которая использует BackgroundWorker для выполнения серии тестов. Я использую событие ProgressChanged для отправки сообщений в основной поток, который затем выполняет все обновления в пользовательском интерфейсе. Я прочесал свой код, чтобы убедиться, что я ничего не делаю с пользовательским интерфейсом в фоновом режиме. В моем коде нет циклов while, а у BackgroundWorker конечное время выполнения (измеряется в секундах или минутах). Однако по какой-то причине, когда я блокирую свой компьютер, часто приложение зависает при повторном входе в систему. Дело в том, что BackgroundWorker даже не запускается, когда это происходит. Причина, по которой я считаю, что это связано с BackgroundWorker, заключается в том, что форма зависает только тогда, когда BackgroundWorker был выполнен с момента загрузки приложения (он запускается только при наличии определенного пользовательского ввода).
Я передаю этому потоку список TreeNodes из TreeView в моем пользовательском интерфейсе с помощью метода RunWorkerAsync, но я читаю только эти узлы в рабочем потоке. Любые изменения, которые я в них выполняю, выполняются в потоке пользовательского интерфейса через событие progressChanged. .
Я использую Thread.Sleep в моем рабочем потоке для выполнения тестов через определенные промежутки времени (что включает в себя отправку сообщений через сокет TCP, который не был создан в рабочем потоке).
Я полностью озадачен тем, почему мое приложение может зависать. Я уверен, что я делаю что-то «незаконное» где-то, я просто не знаю, что.