
背景:
winform(vs2010)前台界面上有2个group(group1,group2),
每个group上面有一些lable用于显示后台查询出来的数据,后台3个线程A,B,C
A线程每隔几秒查询数据库,并把查询出来的数据更新到group1上的lable上(定义),
B线程每隔几秒查询数据库,并把查询出来的数据更新到group2上的lable上,通过一个辅助线程计算出的一个值赋给textBox1.text;
1.直接在窗体的构造函数中添加:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false
此时禁用了所有的控件合法性检查。
2.通过代理来解决(msdn)
private delegate void SetTextCallback(string text)//在给textBox1.text赋值的地方调用以下方法即可 private void SetText(string text) { // InvokeRequired需要比较调用线程ID和创建线程ID // 如果它们不相同则返回true if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText)this.Invoke(d, new object[] { text })} else { this.textBox1.Text = text} }
这里主要用到了.NET中的 delegate。
另外如果线程AB只负责将数据保存在全局变量里,用一个有 *** 作权限的C(主界面搞个timer)调用这些数据并显示在界面上就没问题了。
<meta http-equiv="refresh" content="600url=本页面url">这是每十分钟刷新一次页面,呵呵。
你在页面的加载事件中就可以查询数据库了。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)