我是一名经验较少的C#程序员,需要在程序流程管理方面寻求帮助。这是一个WinFormApp,它会要求用户输入多个参数,并使用这些参数建立串口通信以进行测量。这些测量在一个异步方法中进行,大约需要20分钟才能完成。因此,我正在使用
void main()
{
//Setup
}
private void button1_Click(object sender, EventArgs e)
{
await measurements();
//Plot results
}
private async Task measurements()
{
while(true){
//Make some measurements
await Task.Delay(120000);
//Make measurements, present data in the UI form.
//return if done
}
}
现在我需要添加一个按钮,以便用户可以取消测量以更改输入或参数,然后重新开始测量。因此,我添加了一个“取消”按钮。
private void button7_Click(object sender, EventArgs e)
{
textBox64.Enabled = true;
button6.Enabled = true;
button5.Enabled = true;
textBox63.Enabled = true;
button3.Enabled = true;
trackBar1.Enabled = true;
timer.Enabled = true;
button7.Enabled = false;
clearData();
// measurement.Stop();
}
现在我不知道如何管理程序的流程。我尝试在
button1_Click()
中创建一个try-catch
结构,并从button7_Click()
抛出异常,但它无法传递到button1_Click()
。然后我尝试在新线程上运行
measurements()
。但该线程无法访问主窗体上的70多个UI元素。即使我不会降至使用Goto的地步。
我需要的是建议,您将如何编写程序以在此情况下对应用程序进行良好的控制,而不会通过风险较高的异常和Goto来危及程序的流程。
while(true)
循环更改为while(measuring)
,并在应该停止时设置measuring=false
。 - AntiHeadshot