【发布时间】:2016-05-05 18:41:48
【问题描述】:
我是一个缺乏经验的 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:谢谢,我想过这个,但这需要时间,因为每次循环迭代都需要很多时间。我希望 UI 能够快速响应用户的操作。 PaulF 9:是的,我知道异常很好,但不应允许它们控制程序流。这就是我的意思! :)
-
@NoobPointerException 这是不正确的。异常用于发出异常控制流的信号。
标签: c# multithreading exception return goto