对不起,我是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();
}
答案 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(开始)等。