如何在另一个按钮语句中使用检查按钮?c#

如何在另一个按钮语句中使用检查按钮?c#,c#,C#,我有个问题。我想使用if语句检查按钮是否被单击。例如: public void button1_Click(object sender, EventArgs e) { while (1) { ... ... ... if (Button2 == clicked) { break; } } } 但它不是这样工作的,因为“.click”只

我有个问题。我想使用if语句检查按钮是否被单击。例如:

public void button1_Click(object sender, EventArgs e)
{
    while (1)
    {
         ...
         ...
         ...

         if (Button2 == clicked)
         {
              break;
         }
    }
}
但它不是这样工作的,因为“.click”只能位于“+=”或“-=”的左侧。你知道我如何检查按钮2是否被点击了吗

代码如下:我想检查按钮2以停止“程序”。 按钮2的检查几乎在代码末尾;)

public void按钮1\u单击(对象发送者,事件参数e)
{
随机rnd=新随机();
国际过滤公司;
int ExFilterPos;
弦1;
int[]EmLB=新int[126];
int[]ExLB=新int[126];
int-LBEmAnzahl=0;
int LBEmTot=0;
int LBExAnzahl=0;
int-lbextort=0;
UInt32 C_Zyklen;
UInt32-Zyklen;
Roche.DetectionControl2.Device_Filterwheels.ELBPowerState LB_On=Roche.DetectionControl2.Device_Filterwheels.ELBPowerState.LBOn;
Roche.DetectionControl2.Device_Filterwheels.ELBPowerState LB_Off=Roche.DetectionControl2.Device_Filterwheels.ELBPowerState.LBOff;
Roche.DetectionControl2.Device_Filterwheels.fiweGetLBResponse光屏障;
string Text=string.Format(“Filterrad Dauertest\r\nGestart am{0:d}um{0:t}\r\n\r\n”,DateTime.Now);
System.IO.File.writealText(@“TestLogFile\Filterrad_Dauertest1.txt”,Text);
Instrument.N1_DetectionControl2_1_Device_Filterwheels.fiweInitFilter();
系统.线程.线程.睡眠(50);
而(ZyklenHm.)


您可以使用
标志
变量来实现这一点。声明
标志
值并将其初始化为
。在
按钮2上单击将标志值更改为
,如下所示

private bool flag= false;

private void button2_Click(object sender, EventArgs e)
{
    flag= true;
}

public void button1_Click(object sender, EventArgs e)
{
    //Use flag to check whether button 2 has clicked or not
    if (flag)
    {

    }
    else
    {

    }
}

除了您想要的奇怪行为之外..而且由于您没有使用线程,您有以下选项:

本地函数(.Net>4.7)

线程

Thread newThread;
private void Button1_Click()
{
    newThread = new Thread(YourBreakableProcess);
    newThread.Start();
}
private void Button2_Click()
{
    newThread.Join();
}
private void YourBreakableProcess()
{
    //Your breakable process
}    
异步方法

我希望你能找到解决办法。干杯

编辑: 因为您想要的是中断您正在做的任何事情的过程,所以如果您没有绑定到特定的框架版本,那么您唯一的选择就是上面所示的本地功能

BackgroundWorker并检查每一步按钮2是否按下了其他答案中提到的标记

线程,并制作线程。按下按钮2时加入

编辑2:
使用线程更新了答案,我建议如果您使用此选项,最好使用BackgroundWorker,因为您将拥有整个流程的控制权,只在可以打破它的位置打破它。

Button2没有被点击。Button1被点击。因为您在Button1的点击处理程序中。或者这两个按钮使用的是同一个处理程序吗?(在这种情况下,它可能应该重新命名。)你到底想做什么?@AlekDepler:你的猜测可能恰好是正确的。但是OP仍然应该在问题中澄清。你得到这个错误是因为。单击是一个事件,而不是一个属性,你已经得到了答案,你有一个选项是使用一个标志。不,有标志的东西不起作用,因为如果程序RAM在Button1语句中,它在完成打孔过程之前不会离开它,所以如果我按下Button1启动程序,它将完成它,只有现在我才能将button2标志设置为true它是如何工作的,我用线程制作的,谢谢alot@TareqB。听到这个消息很高兴,但我真的建议你使用backgro相反,它将很容易实现,并且没有任何不良行为,因为您可以选择何时中断循环,只是在您的进程中的任何步骤之前检查工人的属性。加入将破坏线程在任何步骤中,假设您在文件创建中间进行连接,例如。
private bool flag= false;

private void button2_Click(object sender, EventArgs e)
{
    flag= true;
}

public void button1_Click(object sender, EventArgs e)
{
    //Use flag to check whether button 2 has clicked or not
    if (flag)
    {

    }
    else
    {

    }
}
private void B_Click(object sender, EventArgs e)
{
    bool clickFlag = false;
    void Click(object sender2, EventArgs e2)
    {
        clickFlag = true;
    }

    b2.Click += Click;

    while (!clickFlag)
    {
        Thread.Sleep(1);
    }

    b2.Click -= Click;


    //Continue with your stuff
}
Thread newThread;
private void Button1_Click()
{
    newThread = new Thread(YourBreakableProcess);
    newThread.Start();
}
private void Button2_Click()
{
    newThread.Join();
}
private void YourBreakableProcess()
{
    //Your breakable process
}