我注意到,当你创build一个Web服务对象(从SoapHttpClientProtocolinheritance),并使用Async方法时,它会在Windows GUI线程上进行callback。
有谁知道这是如何工作的?
我怎样才能达到同样的目的。
我认为这将节省我不必检查我的GUIforms的Invokerequired,如果我确定callback总是发生在GUI线程。
在我的新窗口安装Image.FromStream不以相同的方式工作
在启动Avaya主动拨号程序时,WPF中的System.AccessViolationException
在线程中调用列表框
屏幕保护程序仍然必须安装到System32?
我怀疑它使用Asyncoperationmanager.SynchronizationContext静态获取同步上下文。 这可以让你适当地发布回调。
辉煌。 感谢您的答案。 两种选择似乎都起作用,并有其优势。
以下是我用来测试的示例代码:
public partial class asynctest : Form { static void Main() { Application.Run(new asynctest()); } Asyncoperation _operation; SynchronizationContext _context; TextBox _textBox; public asynctest() { _operation = AsyncoperationManager.CreateOperation(null); _context = WindowsFormsSynchronizationContext.Current; _textBox = new TextBox(); this.Controls.Add(_textBox); new Thread(AsyncThread).Start(); } void AsyncThread() { _operation.Post(GuiThread,null); _context.Post(GuiThread,null); } void GuiThread(object state) { _textBox.Text = _textBox.Invokerequired ? "Didn't work" : "It Worked"; } }
您可以在主线程中创建一个WindowsFormsSynchronizationContext对象,然后在另一个线程上调用其Send方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。