How to use the BackgroundWorker event RunWorkerCompleted

后端 未结 3 1855
说谎
说谎 2021-01-18 05:30

All,I already knew the basic usage the BackgroundWorker to handle multiple thread case in the WinForm . And the code structure looks like below.

In the

相关标签:
3条回答
  • 2021-01-18 05:54

    The Result property in RunWorkerCompletedEventArgs is the value you have assigned to the Result property of DoWorkEventHandler in DoWork().

    You can assign anything you like to this, so you could return an integer, a string, an object/composite type, etc.

    If an exception is thrown in DoWork() then you can access the exception in the Error property of RunWorkerCompletedEventArgs. In this situation, accessing the Result property will cause an TargetInvocationException to be thrown.

    0 讨论(0)
  • 2021-01-18 06:03

    You can use the Result property to store any results from the DoWork and access it from Completed event. But if the background worker process got cancelled or an exception raised, the result won't be accessible. You will find more details here.

    0 讨论(0)
  • 2021-01-18 06:06
    public class MyWorkerClass
    {
        private string _errorMessage = "";
        public string ErrorMessage { get { return _errorMessage; } set { _errorMessage = value; }}
    
        public void RunStuff(object sender, DoWorkEventArgs e)
        {
            //... put some code here and fill ErrorMessage whenever you want
        }
    }
    

    then the class where you use it

    public class MyClassUsingWorker
    {
        // have reference to the class where the worker will be running
        private MyWorkerClass mwc = null;
    
        // run the worker
        public void RunMyWorker()
        {
            mwc = new MyWorkerClass();
            BackgroundWorker backgroundWorker1 = new BackgroundWorker();
            backgroundWorker1.DoWork += new DoWorkEventHandler(mwc.RunStuff);
            backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
            backgroundWorker1.RunWorkerAsync();
        }
    
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            string strSpecialMessage = mwc.ErrorMessage;
    
            if (e.Cancelled == true)
            {
                resultLabel.Text = "Canceled!";
            }
            else if (e.Error != null)
            {
                resultLabel.Text = "Error: " + e.Error.Message;
            }
            else
            {
                resultLabel.Text = e.Result.ToString();
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题