根据我对 .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/