如何检查一个按钮是否被点击,在C#中的windows窗体应用程序中的另一个按钮点击事件中
本文关键字:按钮 窗体 windows 应用程序 中的 何检查 事件 另一个 一个 是否 检查 | 更新日期: 2023-09-27 18:00:32
我在表单上有两个按钮,我想用第一个按钮开始数据传输,然后按下第二个按钮停止。
代码为:
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是停止按钮,process函数是我正在实现的一个函数,在这个函数中,使用bool类型的停止变量,我在process方法中实现了两个不同的函数,但我想不断地检查是否按下了停止按钮,但在这里,用这个代码我没有成功。
因此,请帮助我如何在按下停止按钮时,将值true传递给启动按钮本身的事件点击函数中的停止变量。
创建取消令牌,在按钮中启动异步Task启动事件处理程序将您的方法放入该Task中,传递对此取消令牌的引用并使用它可以在以后需要时在"停止"按钮事件处理程序中停止此任务。
更多信息: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();
}
对于启动和停止按钮使用两个独立的Handler。这使您的逻辑更易于遵循。然后这样做:
private void stdaq_Click(object sender, EventArgs e) // Start
{
Process(true);
}
private void spdaq_Click(object sender, EventArgs e) // Stop
{
Process(false);
}
或者更好:创建两个独立的方法StartProcess()
和StopProcess()
。