多线程——工作线程调用主线程中控件的方法 由于控件中定义的加载文件的方法处理数据较多速度比较慢,想放到工作线程中处理。但是由于控件对象不能够在创建的工作线程调用。所有有什么办法既可以调用控件对象又可以在工作线程中运行,避免出现主程序阻塞的状态 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用Invoke来调用方法,比如:private void button1_Click(object sender, EventArgs e){ Thread th = new Thread(aa); th.Start();}delegate void somedle();private void aa(){ if (this.InvokeRequired) { somedle sd = new somedle(aa); this.Invoke(sd); return; } ShowChar('A');}public void ShowChar(char ch){ lock (this) { textBox1.Text += ch; }} Control.CheckForIllegalCrossThreadCalls = false;这个也可以。 To:hbxtlhx Invoke是不可以的因为该方法是运行在UI线程中的,这样又等于运行到了主窗体线程中。这个我已经考虑过了。不过还是谢谢你 private void button1_Click(object sender, EventArgs e){ Thread th = new Thread(aa1); th.Start();}private void aa1(){ //耗时函数 aa();//访问主线程的控件必须使用委托Invoke //耗时函数} delegate void somedle();private void aa(){ if (this.InvokeRequired) { somedle sd = new somedle(aa); this.Invoke(sd); return; } ShowChar('A');}public void ShowChar(char ch){ lock (this) { textBox1.Text += ch; }} hbxtlhx,你写的确实有些不一样,我再仔细看看,别早造成冤家错案了 问题:1、aa()必须加载耗时代码的中间吗?2、最后ShowCar到底什么作用程序都已经执行完了,锁它还有什么意义?3、有点想递归调用aa方法的那个Invoke是不是间断的将信息返回给控件的线程? hbxtlhx 的代码应该把Invoke换成BegainInvoke,这样避免多个线程同时调用该段代码,crossrowman的代码正解! 在控件中开启一个工作线程进行数据处理,然后利用delegate/event在线程中定义需要的事件支持,数据处理到相应的地方,调用事件,在控件和主UI中定义事件的实现,是否可以解决问题。或者利用消息功能,然后在控件和主UI中的void DefWndProc(ref Message m)功能进行处理 udp 客户端连接服务器的问题 关于自定义用户控件的问题 有一个c#问题 为什么textbox的KeyPress事件点回车键时没有反映? 两个XML查询问题 access文件转换成文本文件 请把下列伪代码变换成能实现运行的C#代码??(剪切板操作) 水晶报表中如何对每页汇总(在线等!!!) 关于C#从数据库中写入Word文档---有点急 简单的UploadValues(Uri,"POST",nvc)上传登录信息问题 新手求组vs2005 c# 解读程序:一个C#IOC程序的解读问题
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(aa);
th.Start();
}delegate void somedle();
private void aa()
{
if (this.InvokeRequired)
{
somedle sd = new somedle(aa);
this.Invoke(sd);
return;
}
ShowChar('A');
}
public void ShowChar(char ch)
{
lock (this)
{
textBox1.Text += ch;
}
}
这个也可以。
Invoke是不可以的因为该方法是运行在UI线程中的,这样又等于运行到了主窗体线程中。这个我已经考虑过了。不过还是谢谢你
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(aa1);
th.Start();
}private void aa1()
{
//耗时函数
aa();//访问主线程的控件必须使用委托Invoke
//耗时函数
} delegate void somedle();
private void aa()
{
if (this.InvokeRequired)
{
somedle sd = new somedle(aa);
this.Invoke(sd);
return;
}
ShowChar('A');
}
public void ShowChar(char ch)
{
lock (this)
{
textBox1.Text += ch;
}
}
1、aa()必须加载耗时代码的中间吗?
2、最后ShowCar到底什么作用程序都已经执行完了,锁它还有什么意义?
3、有点想递归调用aa方法的那个Invoke是不是间断的将信息返回给控件的线程?
crossrowman的代码正解!
或者利用消息功能,然后在控件和主UI中的void DefWndProc(ref Message m)功能进行处理