2013-01-16 117 views
2

我的應用程序從主線程(UI)線程以外的線程接收來自h/w設備的一些命令。.NET在其他線程的主線程(UI)中執行函數

// start receiver-thread 
m_recThread = new Thread(RecThread) { Name = "RS" }; 

從這個線程我想做的一些行動在UI Theraad。說一個按鈕點擊!我正在使用

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, 
    new Action<Vote>(StartThisVote), presidentvote); 

但這沒有奏效。請讓我知道誰可以從後臺線程執行主線程(UI)中的命令。

+0

你是什麼意思「這沒用......」 – DHN

回答

2

從後臺線程中,CurrentDispatcher將爲空。您需要使用與要修改的UI相關聯的調度程序。如果您沒有從線程代碼訪問控制本身,則可以在啓動線程時直接傳遞調度程序。 (假設你在啓動輔助線程時處於UI線程狀態)。

正如評論中指出的那樣,假設你只有一個調度程序(很有可能),你可以使用Application.Current.Dispatcher來訪問它。 (這很難通過這種靜態方法進行測試,但很容易編碼...)

或者,如果您使用C#5和.NET 4.5,我建議您查看異步方法,這會使這很簡單。

+0

你應該也可以通過'Application.Current.Dispatcher'來訪問Dispatcher。 – Clemens

+0

@Clemens:好點 - 會補充一點。 –

+0

謝謝,喬恩!它的工作。 – kamlendra

相關問題