Page 122 - CSharp/C#
P. 122

Console.WriteLine("Count: " + x);
         }

         private async Task<int> TimeintensiveMethod(object file)
         {
             Console.WriteLine("Start TimeintensiveMethod.");

             // Do some time intensive calculations...
             using (StreamReader reader = new StreamReader(file.ToString()))
             {
                 string s = await reader.ReadToEndAsync();

                 for (int i = 0; i < 10000; i++)
                     s.GetHashCode();
             }
             Console.WriteLine("End TimeintensiveMethod.");

             // return something as a "result"
             return new Random().Next(100);
         }


        BackgroundWorker


        See below for a simple example of how to use a BackgroundWorker object to perform time-intensive
        operations in a background thread.


        You need to:

            1.  Define a worker method that does the time-intensive work and call it from an event handler
              for the DoWork event of a BackgroundWorker.
            2.  Start the execution with RunWorkerAsync. Any argument required by the worker method
              attached to DoWork can be passed in via the DoWorkEventArgs parameter to RunWorkerAsync.


        In addition to the DoWork event the BackgroundWorker class also defines two events that should be
        used for interacting with the user interface. These are optional.

            •  The RunWorkerCompleted event is triggered when the DoWork handlers have completed.
            •  The ProgressChanged event is triggered when the ReportProgress method is called.


         public void ProcessDataAsync()
         {
             // Start the time intensive method
             BackgroundWorker bw = new BackgroundWorker();
             bw.DoWork += BwDoWork;
             bw.RunWorkerCompleted += BwRunWorkerCompleted;
             bw.RunWorkerAsync(@"PATH_TO_SOME_FILE");

             // Control returns here before TimeintensiveMethod returns
             Console.WriteLine("You can read this while TimeintensiveMethod is still running.");
         }

         // Method that will be called after BwDoWork exits
         private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
         {
             // we can access possible return values of our Method via the Parameter e
             Console.WriteLine("Count: " + e.Result);



        https://riptutorial.com/                                                                               68
   117   118   119   120   121   122   123   124   125   126   127