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

dea*_*ace 5 wpf multithreading

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

我初始化这些命令如下:

AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute);
Run Code Online (Sandbox Code Playgroud)

我想知道该AnsCommandExecute()方法是否适用于 UI 线程或后台线程?

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

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

Roc*_*rld 4

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

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

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

如果您要异步接收响应,则必须在“调度程序”的帮助下将操作移回主线程。更多信息还可参见Dispatcher 文档