How to wait for background worker to finish processing?

前端 未结 5 702
闹比i
闹比i 2021-01-19 17:07

I have 3 background workers each processing a channel of a 24-bit Bitmap image (Y, Cb, Cr). The processing for each 8-bit image takes several seconds and they might not com

5条回答
  •  青春惊慌失措
    2021-01-19 17:42

    Consider using AutoResetEvents:

    private void button1_Click(object sender, EventArgs e)
        {
            var e1 = new System.Threading.AutoResetEvent(false);
            var e2 = new System.Threading.AutoResetEvent(false);
            var e3 = new System.Threading.AutoResetEvent(false);
    
            backgroundWorker1.RunWorkerAsync(e1);
            backgroundWorker2.RunWorkerAsync(e2);
            backgroundWorker3.RunWorkerAsync(e3);
    
    
            // Keep the UI Responsive
            ThreadPool.QueueUserWorkItem(x =>
            {
                // Wait for the background workers
                e1.WaitOne();
                e2.WaitOne();
                e3.WaitOne();
                MethodThatNotifiesIamFinished();
            });
    
            //Merge Code
        }
    
    
        void BackgroundWorkerMethod(object obj)
        {
            var evt = obj as AutoResetEvent;
            //Do calculations
            etv.Set();
        }
    

    This way you do not waste cpu time in some loops & using a seperate thread for waiting keeps the UI Responsive.

提交回复
热议问题