2012-10-06 54 views
1

我正在WPF上工作。 我的應用程序使用ICommands將方法綁定到按鈕。 我初始化這些命令如下:IComman/DelegateCommand在哪個線程上運行

AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute); 

我想知道,如果AnsCommandExecute()方法會在UI線程或後臺線程工作。 如果它在UI線程上工作,我必須爲此execute()方法創建另一個線程,因爲我的應用程序在後臺執行大量處理。

此外,我的應用程序使用TCP與另一個應用程序進行通信。所以,爲了獲得更好的性能我是否必須使用不同的線程來接收數據,處理和發送數據。 這種應用程序的最佳線程方法是什麼?

回答

2

查找AnsCommandExecute()方法是否可以在主線程上工作的最簡單方法是在該方法中放置斷點並檢查調用堆棧。

快速回答是 - AnsCommandExecute()將在主線程上執行。

要回答您的線程要求,您可以在單獨的線程中調用AnsCommandExecute()中的內容。這將使UI響應。

如果您要異步接收響應,則必須藉助「Dispatcher」將操作移回主線程。

+0

謝謝拉克什。 MSDN說:'任何不需要在UI線程上完成的工作應該移到其他線程上,以便在後臺處理。這是否意味着如果我的ObservableCollection未綁定/顯示在UI上,那麼我可以通過創建新線程來完成所有ObservableCollection相關處理? – deathrace

+0

您的ObservableCollection將綁定源(視圖模型或模型的屬性)。所以它將成爲主線的一部分。您可以將TCP通信移至其他線程。一旦數據從其他線程獲取,使用Dispatcher在ObservableCollection中添加新檢索到的記錄。 – RockWorld