我在连续运行应用程序时遇到问题而没有挂起(附加数据)
我想运行此代码而不是每5秒钟挂在后台。
我的代码是:
public void Button1_Click(System.Object sender, System.EventArgs e)
{
if (Button1.Text == "Start")
{
Timer1.Interval = 5000;
Timer1.Enabled = true;
Button1.Text = "Stop";
}
else if (Button1.Text == "Stop")
{
Timer1.Enabled = false;
Button1.Text = "Start";
}
}
答案 0 :(得分:1)
您必须使用BackgroundWorker。
将导致用户界面悬挂的进程(代码中的Timer1_Tick)置于DoWork(object sender, DoWorkEventArgs e)
方法中,并通过调用RunWorkerAsync
调用它。
在http://www.dotnetperls.com/backgroundworker
请记住,不要在DoWork
方法中使用任何特定于线程的变量。您必须将它们作为参数传递给方法。
更新:以下是您的代码应该是什么样的:
未经测试
public void Timer1_Tick(System.Object sender, System.EventArgs e)
{
var bgw = new BackGroundWorker();
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
// Put you try-catch block here.
}
答案 1 :(得分:1)
或者,您可以将其实现为Windows服务,该服务将在您的系统后台运行,而不会显式显示。在主线程中,您可以执行5秒延迟所需的操作。