Form freezes during while loop

前端 未结 3 1978
旧巷少年郎
旧巷少年郎 2021-02-10 12:27

I have a piece of code that checks if a certain application is running

while (Process.GetProcessesByName(\"notepad\").Length == 0)
{
     System.Threading.Thread         


        
3条回答
  •  南方客
    南方客 (楼主)
    2021-02-10 13:01

    In this case, you actually want some work done on a thread that's separate from your main UI thread.

    The ideal scenario would be to leverage the BackgroundWorker object, which will happily run on another thread and not block your UI.

    I won't give you a full explanation, as there are plenty of tutorials out there, but you're going to want to do something like:

    var worker = new BackgroundWorker();
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    

    This creates the BackgroundWorker and binds its DoWork event to the workerDoWork handler we are about to create:

     void worker_DoWork(object sender, DoWorkEventArgs e)
     {
        //Glorious time-consuming code that no longer blocks!
        while (Process.GetProcessesByName("notepad").Length == 0)
        {
            System.Threading.Thread.Sleep(1000);
        }
     }
    

    Now start the worker:

     worker.RunWorkerAsync();
    

    Check out this tutorial: http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners

提交回复
热议问题