我根据Microsoft基于事件的异步模式实现了一个组件,以与REST服务交互,我希望在基于UI的应用程序中使用该组件。
我会把代码发出去,但是有很多。
总之,我观察到的是:
问题是UI更新方法由不拥有UI的第三个线程(ID 7)执行。
在我的解决方案中,我检查this.InvokeRequired属性:
private void task_completed(EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new Action<EventArgs>(login_completed), new[] { e });
}
else
{
//Execute UI stuff
}
}它可以正常工作,但我想知道我是否犯了一个错误,或者这种行为是否正常。
我期望AsyncOperation.PostOperationCompleted方法直接调用ThreadID 1。相反,它创建了另一个必须调用线程1的线程.
如果它直接调用线程1,那就太好了。
感谢您的阅读。
发布于 2015-04-10 15:31:21
在封面下面,AsyncOperation.PostOperationCompleted()调用Post,它最终会这样做(根据Reflector,使用.NET 4.5):
ThreadPool.QueueUserWorkItem(new WaitCallback(d.Invoke), state);其中d是您的回调委托。
因此,您的委托正在线程池中的线程上运行。
你看到的都是正常的。
https://stackoverflow.com/questions/29564969
复制相似问题