Gui*_*ume 17 c# events multithreading delegates
我想要两个主题.我们打电话给他们:
线程A触发事件,线程B侦听此事件.当执行线程B事件侦听器时,它是用线程A的线程ID执行的,所以我猜它是在线程A中执行的.
我想做的是能够向线程B发起事件,例如:"嘿,数据已准备就绪,你现在可以处理它".此事件必须在其自己的Thread中执行,因为它使用只有他可以访问的内容(如UI控件).
我怎样才能做到这一点 ?
谢谢你的帮助.
Ree*_*sey 12
您需要将信息封送回UI线程.
通常,您将在事件处理程序中处理此问题.例如,假设线程A是您的UI线程 - 当它在线程B中的对象上订阅事件时,事件处理程序将在线程B内运行.但是,它可以将其封送回UI线程:
// In Thread A (UI) class...
private void myThreadBObject_EventHandler(object sender, EventArgs e)
{
this.button1.BeginInvoke( new Action(
() =>
{
// Put your "work" here, and it will happen on the UI thread...
}));
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法可能是使用一个事件处理程序进行订阅,该处理程序只将"真正的"处理程序调用编组到线程B上.例如,处理程序可以调用Control.BeginInvoke
在线程B上做一些工作:
MethodInvoker realAction = UpdateTextBox;
foo.SomeEvent += (sender, args) => textBox.BeginInvoke(realAction);
...
private void UpdateTextBox()
{
// Do your real work here
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28604 次 |
最近记录: |