功能完成后,等待10秒钟,然后取消运行重新运行相同的功能

时间:2018-11-20 13:14:04

标签: c# .net

对不起,我是C#.NET语言的新手,我想知道两个疑问。

我将以下功能绑定到Start按钮,当我单击该按钮时,以下功能将运行一次。

问题1

如何使该功能等待10秒钟,然后在上一个成功完成后重新运行。如果发生任何错误或用户单击“取消”按钮,则该功能不应运行。

问题2

如果我希望该功能完全停止运行,如何取消10秒计时器? 如果要在此之后运行,可以再次按下Start按钮。

代码

private void RunAPI(DBSetting dbSetting, ThreadObj callback)
        {
            ConnectDB();

            Function function = new Function();

            try
            {
                function.A2P_GetCompanyInfo(dbSetting, con);
                //function.P2A_AddARPayment(dbSetting, con);
                function.A2P_AddPaymentMethod(dbSetting, con);

                // AR Invoice & Invoice Detail
                string invoice_dockey = function.A2P_AddInvoice(dbSetting, con);
                function.A2P_AddInvoiceDetail(dbSetting, invoice_dockey, con);

                // AR CN & CN Detail
                string arcn_dockey = function.A2P_AddArcn(dbSetting, con);
                function.A2P_AddARCNDetail(dbSetting, arcn_dockey, con);
                function.A2P_AddARCNKnockOff(dbSetting, arcn_dockey, con);

                // ARPayment & Payment Detail 
                string arpayment_dockey = function.A2P_AddARPayment(dbSetting, con);

                // User 
                function.A2P_AddUser(dbSetting, con);

                // Payment Method 
                function.A2P_AddPaymentMethod(dbSetting, con);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Error Message : " + ex.Message);
            }

            DisconnectDB();
        }

1 个答案:

答案 0 :(得分:0)

实际上,很可能无需使用多个线程即可执行此操作。您所需要的只是一个布尔标志,以指示是否仍需要运行函数或已将其取消。这是一个示例代码,假设我们有两个按钮(button1和button2)和一个计时器(timer1):

public partial class Form1 : Form
{
    private bool shouldRunAgain;

    public Form1()
    {
        InitializeComponent();
        timer1.Interval = 10000;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        shouldRunAgain = true;
        RunMyFunction();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        shouldRunAgain = false;
    }

    private void RunMyFunction()
    {
        try
        {
            // do something
            timer1.Start();
        }
        catch (Exception)
        {
            // handle exceptions
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Stop();
        if (shouldRunAgain)
        {
            shouldRunAgain = false;
            RunMyFunction();
        }
    }
}

当然,实际代码需要处理更多情况,例如用户单击两次Start(开始)等。