Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 对于ICommand&;DelegateCommand在哪个线程上运行?_Wpf_Multithreading - Fatal编程技术网

Wpf 对于ICommand&;DelegateCommand在哪个线程上运行?

Wpf 对于ICommand&;DelegateCommand在哪个线程上运行?,wpf,multithreading,Wpf,Multithreading,我的应用程序使用ICommands将方法绑定到按钮 我按如下方式初始化了这些命令: AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute); 我想知道AnsCommandExecute()方法在UI线程还是后台线程上工作 如果它在UI线程上工作,我必须为这个execute()方法创建另一个线程,因为我的应用程序在后台执行大量处理 此外,我的应用程序使用TCP与另一个应用程序进行通信。因此,为了获得

我的应用程序使用
ICommand
s将方法绑定到按钮

我按如下方式初始化了这些命令:

AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute);
我想知道
AnsCommandExecute()
方法在UI线程还是后台线程上工作

如果它在UI线程上工作,我必须为这个execute()方法创建另一个线程,因为我的应用程序在后台执行大量处理

此外,我的应用程序使用TCP与另一个应用程序进行通信。因此,为了获得更好的性能,我必须使用不同的线程来接收、处理和发送数据。
对于这样的应用程序,什么是最好的线程方法?

要确定
AnsCommandExecute()
方法是否在主线程上工作,最简单的方法是在方法中放置断点并检查调用堆栈

快速回答是肯定的-
AnsCommandExecute()
将在主线程上执行

为了满足线程需求,您可以在单独的线程上调用
AnsCommandExecute()
中的内容。这将使UI具有响应性


如果要异步接收响应,则必须在“”的帮助下将操作移回主线程。更多信息请访问。

谢谢Rakesh。MSDN说,“任何不需要在UI线程上完成的工作都应该转移到其他线程上,以便在后台处理”。这是否意味着如果我的ObservaleCollection未绑定/显示在UI上,那么我可以通过创建新线程来执行所有与ObservaleCollection相关的处理?您的ObservaleCollection将是绑定源(视图模型或模型的属性)。因此,它将成为主线程的一部分。您可以将TCP通信移动到其他线程。一旦从其他线程检索到数据,使用Dispatcher在ObservableCollection中添加新检索到的记录。