У меня есть приложение C# Winforms, которое разговаривает с USB-устройством через библиотеку поставщика. Я запускаю этот интерфейс с фоновым потоком. Во время конструктора поставщика весь графический интерфейс приложения Winforms заморожен. Одно ядро процессора составляет 100%, но остальные ядра простаивают. Как определить, что вызывает поставщик, чтобы блокировать графический интерфейс?Почему блокирование фонового потока GUI
бегает фоновый поток, как это -
public HardwareInterfaceClass() {
var hardwareThread = new Thread(HardwareInterfaceThread);
hardwareThread.IsBackground = true;
hardwareThread.Name = "USB Interface Communication";
hardwareThread.Start();
return
}
private void HardwareInterfaceThread() {
var usbInterface = new USBInterfaceHardware(0); // Takes 5 seconds and blocks GUI
...
}
Блокирует ли пользовательский интерфейс или он очень занят? –
Вы когда-нибудь вызывали что-либо в этом API с помощью основного потока? потому что они могли захватить ваш «SynchronizationContext» и опубликовать рабочие элементы в нем. –
Является ли эта третья сторона DLL, возможно, страдающей близостью к основной теме? У меня было это однажды, я должен был убедиться, что все объекты были созданы в другом потоке. Не помню, было ли это связано с STA/MTA. –