Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台工作程序while循环_C# - Fatal编程技术网

C# 后台工作程序while循环

C# 后台工作程序while循环,c#,C#,我试图创建的是一个每30秒执行几个进程的后台工作程序。但我希望这个while循环在程序启动时一直执行。以下是我正在使用的: private void watcherprocess1() { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { whil

我试图创建的是一个每30秒执行几个进程的后台工作程序。但我希望这个while循环在程序启动时一直执行。以下是我正在使用的:

    private void watcherprocess1()
    {
        backgroundWorker1.RunWorkerAsync();

    }  
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        while(
        Thread.Sleep(30000);
        specficView2();
        makeFormlist2();
        populateListview2();
    }
我的主要问题是ai可以想出一个好的while循环来保持这个运行

我认为a更适合这个。它将异步勾选,您可以从勾选事件中生成进程的子进程。

您在寻找什么

while(true)

使用
System.Windows.Forms.Timer

我同意Bobby的观点,System.Threading.Timer(或System.Timers.Timer)可能最适合这项工作

但是,如果您必须创建一个使用辅助线程的线程,我宁愿为该任务专门创建一个。在应用程序的整个生命周期中,运行BackGroundWorker(线程池线程)是一个while循环,这对我来说并不合适

也许是这样的:

private void watcherprocess1()
{        
    Thread thread = new Thread(new ThreadStart(this.Work));
    thread.IsBackground = true;
    thread.Name = "My Worker.";
    thread.Start();
}  

private void Work()
{
    while(true)
    {            
        specficView2();
        makeFormlist2();
        populateListview2();
        Thread.Sleep(30000);
    }
}

请记住,这将在UI线程上执行事件:
计时器用于按用户定义的间隔引发事件。此Windows计时器专为使用UI线程执行处理的单线程环境而设计。它要求用户代码有一个可用的UI消息泵,并且总是从同一个线程运行,或者将调用封送到另一个线程。
@Justin:在这种情况下,考虑到所讨论的方法的名称,这实际上可能是最好的选择……同意,我只是想指出这一点,因为这是它与线程计时器之间的一个重要区别……如果工作可能需要超过间隔(30秒),您可能希望在工作结束时设置计时器,以调整在当前工作单元中花费的时间。否则,您的后台工作人员可能会重叠,并且可能会有许多人同时运行。通常,这是需要避免的。