开始暂停并恢复图表上的串行数据绘图

时间:2014-02-19 16:26:31

标签: c# winforms serial-port zedgraph

Windows窗体中是否有控件允许我暂停正在进行的串行数据接收过程,因为我需要检查并验证图形上正在绘制的数据。检查完毕后,我需要恢复这个过程。它就像一个开始..暂停...恢复...暂停 ..过程。

如果有人能建议我上述的理想程序,那将会很棒。 后台工作者是实现此功能的唯一方法吗?

2 个答案:

答案 0 :(得分:0)

根据您使用的协议,您可能能够指示发送方在暂停时不发送任何内容,但我认为最直接的方法是将传入数据缓冲在队列或简单数组上,或者某种东西,然后在用户处于暂停状态时不用新数据更新屏幕。

答案 1 :(得分:0)

我做这样的任务的方式:

实际上你需要使用线程只有一个原因,那就是组织时间 EX:

WRONG:

while(true){
GetDataFromSerialPort(); // you don't know how long it takes 10ms, 56ms, 456ms ...?
DrawData(); // this plots data at randomly spaced intervals
}

RIGHT

while(true){
Thread th1 = new Thread(new ThreadStart(GetDataFromSerialPort)); // thread to acquire
th1.IsBackground = true;                                         // new data
th1.Start();

wait(100);   // main thread waits few milliseconds 

Thread th2 = new Thread(new ThreadStart(DrawData));  // draw on zedGraph on other thread
th2.IsBackground = true;
th2.Start();
}

现在让我们做主要的准备(暂停/恢复......)

您需要定义一个bool标志来决定您的数据采集/绘图循环:

bool isRunning = false; // initially it's stopped

public void startDrawing()
{
isRunning = true;

while(isRunning)
{
//thread to get data
//wait
//thread to draw it
//refer to the above "right" example
}

}

// Now let's set buttons work
private void button1_Click(object sender, EventArgs e)
{
if(button1.text == "START" || button1.text == "RESUME")
{
button1.text = "PAUSE";
startDrawing();
}
else
{
button.text = "RESUME";
isRunning = false;
}
}