我正在使用.NET的Microsoft Chart庫。我試圖繪製每10ms從硬件生成的數據。除了當我移動主窗體時,這通常工作正常。然後更新圖表會阻止工作線程。作爲模擬數據的例子,請看附件中的代碼。MSChart更新塊工作人員thead
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace ChartTest
{
public partial class Form1 : Form
{
private Worker _worker;
double oldData;
public Form1()
{
InitializeComponent();
oldData = 0.0;
_worker = new Worker();
_worker.NewDataEvent += new EventHandler(_worker_NewDataEvent);
}
void _worker_NewDataEvent(object sender, EventArgs e)
{
double data = _worker.GetData();
Add(data - oldData);
oldData = data;
}
private delegate void AddDelegate(double data);
public void Add(double data)
{
if (chart1.InvokeRequired)
{
chart1.Invoke(new AddDelegate(Add), data);
}
else
{
chart1.Series[0].Points.AddY(data);
}
}
private void btnGo_Click(object sender, EventArgs e)
{
_worker.Start();
}
}
public class Worker
{
private double data;
Stopwatch st;
bool running;
public Worker()
{
data = 0.0;
st = new Stopwatch();
running = false;
}
public event EventHandler NewDataEvent;
public void Start()
{
running = true;
Thread t = new Thread(Run);
t.Start();
}
private void Run()
{
st.Start();
while (running)
{
Thread.Sleep(10);
data = (double)st.ElapsedTicks/(double)Stopwatch.Frequency;
NewDataEvent(this, null);
}
}
public double GetData()
{
return data;
}
}
}
注意:如有必要,我可以提供設計器代碼。
Worker類運行一個線程,每10毫秒生成一些數據。它引發了一個Form1用來在圖表中調用更新的事件。這通常很好,除非拖延UI的渲染,例如拖動窗體。如果工作人員的Run()函數對時間要求很高,這是有問題的。有沒有辦法在不阻塞線程的情況下儘快更新圖表?
如果這意味着有時需要更新圖20毫秒,那很好。我只希望它儘快更新。謝謝。