c# - 可以指定使用 delegate.BeginInvoke 时运行 AsyncCallback 的线程吗?

标签 c# .net multithreading

根据我对 .NET 的理解,如果我使用 BackgroundWorker 并具有 RunWorkerCompleted 的事件处理程序,则事件处理程序将在调用 RunWorkerAsync 的同一线程上运行。相反,如果我在委托(delegate)上使用 BeginInvoke 来异步运行方法,并将 AsyncCallback 参数传递给 BeginInvoke,是否有任何方法可以指定回调在调用 BeginInvoke 的同一线程上运行——或者就此而言在任意线程上运行?据我了解,回调在线程池中的下一个可用线程上运行。很好,但是有没有办法可以在我想要的任何线程上的 AsyncCallback 中运行代码?我知道您可以在窗体或控件上使用 BeginInvoke,并使回调中的代码在创建 UI 元素的线程上运行。但是,如果我想在没有表单或控件的非 UI 线程上运行代码怎么办?

最佳答案

在您想用作异步操作目标的线程上,CurrentDispatcher属性是一个 System.Threading.Dispatcher 对象,可用于强制回调在该线程上执行。

这是 Control 类用来实现 BeginInvoke 的基类。

有关将其用于 Windows 窗体的问题已经出现。我认为这不会成为问题,但如果您有表单,那么 form.BeginInvoke 是更好的选择。表单和 WPF 似乎都使用相同的基类来处理调用。 http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.aspx

关于c# - 可以指定使用 delegate.BeginInvoke 时运行 AsyncCallback 的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263772/

相关文章:

c# - Entity Framework 相关子查询

c# - 在 MVC3 中录制音频

c# - InternalClientWebSocket 实例无法用于通信,因为它已转换为 'Aborted' 状态

java - java中什么情况下try catch会被绕过?

python - 如何在线程内运行递归函数?

c# - 系统.Data.SqlTypes.SqlTypeException : SqlDateTime overflow

c# - 为什么这个递归搜索返回不相关的结果?

c# - 移出表单时更改 DragEffect

c# - 如果条件在使用 C# 代码的 HTML 页面中不起作用

Python 解释器阻止多线程 DNS 请求?