如何在winforms中使用长时间运行的进程c#

时间:2012-03-18 15:20:57

标签: c# winforms

我正在为我的短信应用程序使用背景。

我创建了一个需要不断发送消息的应用程序。

当我使用background.My应用程序被绞死时,我不知道它为什么,

我的代码是

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   //mycode
}

private void backgroundWorker1_RunWorkerCompleted(
    object sender, RunWorkerCompletedEventArgs e)
{
    backgroundWorker1.CancelAsync();
    backgroundWorker1.RunworkAsync();
}

后来我试过这个

public void Thread()
{
    Thread D = new Thread(BackgroundCode);
    D.Start();
}

public void BackgroundCode()
{
    for (int i5 = 1; i5 > 0; i5 += 1)
    {
       //mycode
    }

}

这两个可以正常工作2或3分钟,但之后就会挂起。

请有人可以帮助我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

试试这个

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   while(true)
   {
       //your sms code
       //call CancelAsync() here if you want to get out!!!!
   }
}

private void backgroundWorker1_RunWorkerCompleted(
    object sender, RunWorkerCompletedEventArgs e)
{
   //donot include RunWorkerAsync() and CancelAsync() in this method!
}

答案 1 :(得分:0)

This is a bit of a long post,但它似乎很适合你的问题。

基本上,它显示了如何使用BackgroundWorker或任务并行库(TPL将是我的建议)来实现这一点

对于TPL,您将创建一个ProgressReporter类,该类将在类中用于将消息传递回主线程,同时继续运行任务。

此外,你的for循环永远不会结束,因为它说要在i5大于0时运行。并且,它从1开始计数,因此它永远不会小于或等于零。这将解决您的问题,但是一旦您解决了这个问题,博客课程中的进度报告者应该会帮助完成其余工作。