我在写一个程序!实现效果如下
1:从数据库读取待发数量;显示在窗体中
2:从数据库读取失败数量:显示在窗体中
3: 从数据库读取发送量:显示在窗体中
4:有一个timer控件 每隔3秒就到数据库中读取待发数量 读到就把信息发送出去(信息量很大)!当然并不是一次性发送完!
是分批发送,发送一批我就删除一批!并在窗体中从新显示待发数量和失败数量,发送量如果是单线程的话,发送信息的时候 程序就会出现无响应状态,假死
为发送单独开一个线程就会 :报线程间操作无效,从不是创建控件的线程访问它
我在网在也找了一些方法!都没成功!请各位前辈不吝赐教谢谢由于本人分数不是很多!
所以分数给的有点少!
不好意思!
1:从数据库读取待发数量;显示在窗体中
2:从数据库读取失败数量:显示在窗体中
3: 从数据库读取发送量:显示在窗体中
4:有一个timer控件 每隔3秒就到数据库中读取待发数量 读到就把信息发送出去(信息量很大)!当然并不是一次性发送完!
是分批发送,发送一批我就删除一批!并在窗体中从新显示待发数量和失败数量,发送量如果是单线程的话,发送信息的时候 程序就会出现无响应状态,假死
为发送单独开一个线程就会 :报线程间操作无效,从不是创建控件的线程访问它
我在网在也找了一些方法!都没成功!请各位前辈不吝赐教谢谢由于本人分数不是很多!
所以分数给的有点少!
不好意思!
定义一个委托比如 delegate void MyDelegate();
Mydelegate del=new Mydelegate (MyFun);
this.BeginInvoke(del);MyFun是一个你自己写的方法,里面包含了你要线程间操作控件的代码
Mydelegate del=new Mydelegate (MyFun);
this.BeginInvoke(del);private MyFun()
{
//这里面执行向窗体控件幅值的语句
}当然也可以用lamuda表达式,更方便一些
this.BeginInvoke(action=> //这里面执行向窗体控件幅值的语句;);
或者使用BackgroundWorker组件,例子很多,google上搜一下吧
{
InvokeCallback msgCallback = new InvokeCallback(m_comm_MessageEvent);
txtMessage.Invoke(msgCallback, new object [] { msg } );
}
http://www.cnblogs.com/zyh-nhy/archive/2007/12/25/1014749.html
实际是让UI线程去操作.界面当然会假死.
尽量少在MyFun中做操作.