Windows窗体中是否有控件允许我暂停正在进行的串行数据接收过程,因为我需要检查并验证图形上正在绘制的数据。检查完毕后,我需要恢复这个过程。它就像一个开始..暂停...恢复...暂停 ..过程。
如果有人能建议我上述的理想程序,那将会很棒。 后台工作者是实现此功能的唯一方法吗?
答案 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;
}
}