Есть сторонняя библиотека, которая работает с устройством. Возвращает 0, если все ок и другие значения когда все плохо.
Иногда библиотека ничего не возвращает, т.е. приложение виснет.
В какую сторону лучше смотреть, чтоб сделать это асинхронным и адеватно по таймауту "отменить" запрос к бибилиотеке.
WPF, C#, .NET 4.0
lam0x86: А другого выбора нет. Нет способов убить зависший таск, только убить поток, в котором он выполняется, ну и как вариант создавать отдельный поток и убивать его по таймауту.
Роман: Я так и не понял, как вы хотите убить зависший поток.
На самом деле, единственное решение в данном случае - создавать отдельный процесс, вызывать там библиотечные функции и в случае зависания убивать процесс и запускать заново.
Вот и подтверждение моих слов от Эрика Липперта (бывшего ведущего разработчика компилятора C#):
Are there any other posibility to terminate threads?
Yes. Your problem is that you should never start up a thread that you cannot tell politely to stop, and it stops in a timely manner. If you are in a situation where you have to start up a thread that might be (1) hard to stop, (2) buggy, or worst of all (3) hostile to the user, then the right thing to do is to make a new process, start the thread in the new process, and then terminate the process when you want the thread to go down. The only thing that can guarantee safe termination of an uncooperative thread is the operating system taking down its entire process.