我在表单上有两个按钮,我想用第一个按钮开始数据传输,然后按第二个按钮停止。
代码是:
private void stdaq_Click(object sender, EventArgs e)
{
stopped = false;
//while (stopped == false)
if (sender == spdaq)
{
stopped = true;
///break;
Process();
}
else if (sender == stdaq)
{
Process();
}
}
这里stdaq是开始按钮,spdaq是停止按钮,进程函数是我正在实现的函数,并且在bool类型的已停止变量中,我在进程方法中实现两个不同的函数,但我想要不断检查是否按下了停止按钮,但是在此处使用此代码我没有成功。
所以请帮我看看如何在按下停止按钮的情况下将值true传递给启动按钮本身的事件点击功能中的已停止变量。
答案 0 :(得分:1)
使用两个单独的处理程序作为开始和停止按钮。这使您的逻辑更容易遵循。然后像这样做:
private void stdaq_Click(object sender, EventArgs e) // Start
{
Process(true);
}
private void spdaq_Click(object sender, EventArgs e) // Stop
{
Process(false);
}
甚至更好:创建两个单独的方法StartProcess()
和StopProcess()
。
答案 1 :(得分:1)
创建取消令牌,启动异步任务按钮启动事件处理程序将您的方法放入此任务,传递对此取消令牌的引用并使用 它将在您稍后需要它时在停止按钮事件处理程序中停止此任务。
更多信息:https://msdn.microsoft.com/en-us/library/jj155759.aspx
如何使用它的示例:
static CancellationTokenSource cts;
static Task t;
private void Method()
{
while (!cts.IsCancellationRequested)
{
// your logic here
}
t = null;
}
private void stdaq_click (object sender, EventArgs e)
{
if(t != null) return;
cts = new CancellationTokenSource();
t = new Task(Method, cts.Token, TaskCreationOptions.None);
t.Start();
}
private void spdaq_Click(object sender, EventArgs e)
{
if(t != null) cts.Cancel();
}