对于 ICommand 和 DelegateCommand,它们运行在哪个线程上?

5

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

我初始化这些命令如下:

AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute);

我想知道AnsCommandExecute()方法是在UI线程还是后台线程上运行的?

如果它在UI线程上工作,那么我是否需要为这个execute()方法创建另一个线程,因为我的应用程序在后台执行了很多处理。

此外,我的应用程序使用TCP与另一个应用程序进行通信。所以,为了更好的性能,我是否需要为接收数据、处理数据和发送数据使用不同的线程。对于这种应用程序,最好的线程处理方法是什么?

1个回答

4
查找 AnsCommandExecute() 方法是否在主线程上运行的最简单方法是在该方法中设置断点并检查调用堆栈。
快速答案是是的 - AnsCommandExecute() 将在主线程上执行。
为了满足您的线程要求,您可以在单独的线程上调用 AnsCommandExecute() 中的内容。这将使用户界面响应。
如果你将以异步方式接收响应,那么你就必须借助 "Dispatcher" 将操作移回主线程。更多信息请参阅 Dispatcher 文档

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接