辅线程收到一些数据以后,因该通知相关事件订阅者,但不应该指使订阅者具体如何去做。UI线程可以这么做:class Form1 : Form { B b = new B(); void On_Form1_Load() { b.DataRecived += this.OnDataReceived(); b.Start(); } void OnDataReceived(object sender, DataEventArgs e) { string message = e.Data; this.BeginInvoke(() => { this.messageTextbox.Text = message; // 运行在UI线程 }); } }
你是不是需要用主线程那个里的变量啊,你可以再你的辅线程里 做一个 主线程那个类的变量,new这个辅线程的类时主线程把自己给传过去,辅线程可以用主线程对象点出来的方法运行。 class Main { void Fun() { Helper helper = new Helper(); helper.caller = this; new Thread(new ThreadStart(helper.helperFun)).Start(); } public void CommonFun() { } } class Helper { public Main caller; public void helperFun() { caller.CommonFun(); } }
{
B b = new B();
void On_Form1_Load()
{
b.DataRecived += this.OnDataReceived();
b.Start();
}
void OnDataReceived(object sender, DataEventArgs e)
{
string message = e.Data;
this.BeginInvoke(() =>
{
this.messageTextbox.Text = message; // 运行在UI线程
});
}
}
{
void Fun()
{
Helper helper = new Helper();
helper.caller = this;
new Thread(new ThreadStart(helper.helperFun)).Start();
}
public void CommonFun()
{ }
}
class Helper
{
public Main caller;
public void helperFun()
{
caller.CommonFun();
}
}