如何仅在一个过程完成后才开始一个过程?

时间:2019-09-19 09:33:27

标签: c# .net

我创建了2个功能,可完成某些特定功能。 我在计时器上调用这些函数。但是在功能1完成之前,功能2开始处理。我怎样才能等到1完成才能开始2。

这是我的代码:

private void btnrun_Click(object sender, EventArgs e)
{
    try
    {
        _bat.ShowDialog();
                StrBatchNumber = _bat.GlobalBatchNumber;

                DialogResult _diaresult = _bat.DialogResult;

                if (_diaresult == DialogResult.OK)
                {
                    if (StrBatchNumber == "")
                    {
                        MessageBox.Show("Please enter a batch number", "Batch Number Missing", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    else
                    {

                        btnstartrobo.PerformClick();

                        btnautostart.PerformClick();


                    }
                }
    }

    catch(Exception)
    {
    }

}
System.Windows.Forms.Timer tmrfirst = new System.Windows.Forms.Timer();
private void btnautostart_Click(object sender, EventArgs e)
{

    tmrfirst.Interval = 1000;
    tmrfirst.Tick += new EventHandler(tmrfirst_Tick);

    tmrfirst.Start();
}

private void tmrfirst_Tick(object sender, EventArgs e)
{
    btnchecksignal.PerformClick();
    Thread.Sleep(100);

    if (textBox8.Text.Contains("+1"))
    {
        button14.PerformClick();
        Thread.Sleep(20);
        button42.PerformClick();

        Thread.Sleep(300);
        btnautostart.PerformClick();

    }

}

我尝试在两者之间设置thread.sleep,但是它不起作用。我怎样才能解决这个问题?请帮忙。

1 个答案:

答案 0 :(得分:0)

您的解决方案无法正常工作的原因是,因为两个操作都在同一线程中运行。因此,您的Thread.Sleep(100)使两个函数都处于等待状态,而不是更改顺序,而是延迟了完整的程序执行。

解决此问题的最简单解决方案是多线程(请参阅有关如何实现另一个线程here以及如何通过运行函数here来启动它的文档)

像这样,您可以将新线程添加到第一个方法的末尾,或将其插入到助手方法中以仅在方法1完成后才运行它。如果您多次调用同一个函数,则可以在创建新线程之前检查该线程是否已经存在,或者在每次第二个函数完成时都将其关闭。