C#中多线程更新Chart控件与BeginInvoke
来源:互联网 发布:什么软件找工作好 编辑:程序博客网 时间:2024/06/01 07:48
C#中多线程更新Chart控件与BeginInvoke
最近把之前修改的MFC平台上的监控程序移植到C#上,需要用到图形控件显示监控曲线,C#中的现成的Chart控件为首选,但是在后台线程中更新Chart数据是总是在接收数据并刷新Chart时Chart控件上的图形变成一个大红叉,如下图所示,一个下午都没查出来为什么,后来在论坛上看到有人说需要利用BeginInvoke委托,就去看了MSDN上的介绍,按照使用说明改写后真的能刷新了,写下代码,以备不时之需。
代码
public delegate void ChartDelegate(Chart _Chart, DataTable _dataTable);//声明委托方法private object[] invokeChartData = new object[2];//声明委托参数,[0]位存放委托方法的第一个参数,[1]位存放委托方法的第二个参数invokeChartData[0] = CurChart;//定义[0]位参数位需要更新的Chart控件invokeChartData[1] = dataTable;//定义[1]位为Chart中的数据/// <summary>/// 执行委托,可以在其他线程中修改dataTable,再调用该方法来执行委托/// </summary>public void UpdateChart(){ CurChart.BeginInvoke(new ChartDelegate(ChartDelegateMethod), invokeChartData);}/// <summary>/// 委托方法/// </summary>/// <param name="_Chart">要更新的Chart控件</param>/// <param name="_dataTable">要写入的数据</param>public void ChartDelegateMethod(Chart _Chart, DataTable _dataTable){ _Chart.Series[0].Points.DataBind(this.dataTable.AsEnumerable(), "日期", "数据", "");}MSDN中用下面的代码示例演示 BeginInvoke 方法的用法。 public delegate void MyDelegate(Label myControl, string myArg2);private void Button_Click(object sender, EventArgs e){ object[] myArray = new object[2]; myArray[0] = new Label(); myArray[1] = "Enter a Value"; myTextBox.BeginInvoke(new MyDelegate(DelegateMethod), myArray);}public void DelegateMethod(Label myControl, string myCaption){ myControl.Location = new Point(16,16); myControl.Size = new Size(80, 25); myControl.Text = myCaption; this.Controls.Add(myControl);}
修改后能正常打印控件,如下图:
0 0
- C#中多线程更新Chart控件与BeginInvoke
- c#多线程(UI线程,控件显示更新) Invoke和BeginInvoke 区别
- c#多线程(UI线程,控件显示更新) Invoke和BeginInvoke 区别
- C#中begininvoke与invoke
- C# 多线程中BeginInvoke和EndInvoke方法
- C# 多线程中更新窗体控件
- C#的Invoke和BeginInvoke、多线程中的界面更新
- C#中chart控件的用法
- C#中跨线程访问控件: 委托, Invoke, BeginInvoke
- c# invoke与beginInvoke
- C# chart控件运用
- C# chart控件
- c#多线程更新窗口界面之 Invoke和BeginInvoke方法的使用
- C#中Invoke与BeginInvoke在线程中的执行解析
- Android 多线程及多线程中更新控件。
- Android 多线程及多线程中更新控件。 .
- Android 多线程及多线程中更新控件。
- Android 多线程及多线程中更新控件。
- 查看Spring源码(一)
- 如何使用 Oracle12c/Pentaho/Microstrategy 建立数据仓库并实现商务智能
- HDU - 1016 Prime Ring Problem DFS
- 解决SQL Server导入数据, 错误 0xc02020f4x
- 机器学习练习(六)—— 支持向量机
- C#中多线程更新Chart控件与BeginInvoke
- java高并发解决方案(转载)
- VS + Libmodbus + QT 环境搭建遇到的几个新手问题
- SPI设备注册过程
- Hadoop(MapReduce)入门 使用Eclipse开发
- java.util.IllegalFormatConversionException: d != java.lang.String
- 枚举Driver和FileSystem
- 跟小博老师一起学Servlet ——Servlet案例
- 【Java并发编程实战】-----“J.U.C”:Phaser