2009-03-17 2 views
1

У меня есть поток, который контролирует состояние устройства (с использованием ввода/вывода). Это запустит событие нескольким частям интерфейса (Forms/Dialogs ..) о состоянии подключения (Connected, Disconnected, Fault). Основываясь на этом статусе, формы и диалоги уничтожаются, создаются, включаются и блокируются.Shift Control от backgrount thread to main thread

Моя проблема:

I getting Cross-Thread exception because the thread doing the operations like Dispose the from, create the from .... . I using smart client, forms and dialogs are part of the WorkItemController and i just terminating that. 

Я не хочу, и использовать Invoke или BeginInvoke. Я хочу, чтобы этот поток продолжал отслеживать только статус. SO, что этот поток должен дать свой контроль основному потоку, и основной поток закроет форму или создаст форму.

Просто я хочу, как переключить управление из одного потока в другой. Есть ли какой-нибудь способ?

ответ

1

Лучшим решением является использование Invoke для возврата к вашему mainthread.

или если вы можете использовать глобальные переменные, разделяемые между основным потоком и фоновым потоком, но это означает, что ваш основной поток должен проверять переменные в цикле, и это может повредить графический интерфейс.

Или используйте System.Windows.Forms.Timer, как он выполняется в основном потоке.