如何检查是否单击了一个按钮,在C#中的Windows窗体应用程序中的另一个按钮单击事件内

时间:2015-07-01 06:32:56

标签: c# .net winforms

我在表单上有两个按钮,我想用第一个按钮开始数据传输,然后按第二个按钮停止。

代码是:

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传递给启动按钮本身的事件点击功能中的已停止变量。

2 个答案:

答案 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(); 
    }