Re: BackgroundWorker problems

"Nassar, Anthony" <[email protected]>
Newsgroups gmane.comp.windows.dotnet.nunit.user
Message-ID <[email protected]>
using System;

using System.ComponentModel;

using System.Threading;

using NUnit.Framework;

 

namespace ClassLibrary1

{

      [TestFixture]

      public class AFixture

      {

            private const string WindowCaption = "ProgressForm Test";

 

            private Form1 _progressForm;

            private bool _doWorkWasCalled;

            private bool _workCompletedWasCalled;

            private bool _testSuiteSetupDone;

            private static bool _workerDisposed;

 

            [TestFixtureSetUp]

            public void DoTestSuiteSetUp()

            {

                  Console.WriteLine("Setting up on thread " +
Thread.CurrentThread.ManagedThreadId);

                  AsyncCallback doStuff = delegate

                                                {

 
Console.WriteLine("Form created on thread " +
Thread.CurrentThread.ManagedThreadId);

 

                                                      _progressForm =
new Form1();

                                                      _progressForm.Text
= WindowCaption;

 

 
_progressForm.backgroundWorker1.DoWork += doWork;

 
_progressForm.backgroundWorker1.RunWorkerCompleted +=
runWorkerCompleted;

 
_progressForm.backgroundWorker1.Disposed += backgroundWorker1_Disposed;

 
_progressForm.Closing += _progressForm_Closing;

 
_progressForm.Disposed += _progressForm_Disposed;

 
_progressForm.backgroundWorker1.ProgressChanged +=
backgroundWorker1_ProgressChanged;

                                                                  //
Note: NOT Show(), but ShowDialog()! You'll have to close the form
yourself.

 
_progressForm.ShowDialog();

                                                                  //
This statement has no effect, for some reason.

 
_progressForm.Dispose();

                                                };

 

                  IAsyncResult result = doStuff.BeginInvoke(null,
doStuff, null);

                  // Now wait for the user to close the form.

                  result.AsyncWaitHandle.WaitOne();

                  _testSuiteSetupDone = true;

            }

 

            private static void _progressForm_Closing(object sender,
CancelEventArgs e)

            {

                  Console.WriteLine("Form closing on thread " +
Thread.CurrentThread.ManagedThreadId);

            }

 

            private static void _progressForm_Disposed(object sender,
EventArgs e)

            {

                  Console.WriteLine("Form disposed on thread " +
Thread.CurrentThread.ManagedThreadId);

            }

 

            private static void backgroundWorker1_ProgressChanged(object
sender, ProgressChangedEventArgs e)

            {

                  Console.WriteLine("Progress reported on thread " +
Thread.CurrentThread.ManagedThreadId);

            }

 

            private static void backgroundWorker1_Disposed(object
sender, EventArgs e)

            {

                  Console.WriteLine("Disposed background worker.");

                  _workerDisposed = true;

            }

 

            private void doWork(object sender, DoWorkEventArgs e)

            {

                  Console.WriteLine("My doWork method called on thread "
+ Thread.CurrentThread.ManagedThreadId);

                  _doWorkWasCalled = true;

                  _progressForm.backgroundWorker1.ReportProgress(0);

                  _progressForm.backgroundWorker1.ReportProgress(33);

                  _progressForm.backgroundWorker1.ReportProgress(66);

            }

 

            //NOTE: There appears to be a bug in NUnit or VS2005 causing
this to not be called when run under NUnit.

 

            private void runWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)

            {

                  Console.WriteLine("Completion callback called on
thread " + Thread.CurrentThread.ManagedThreadId);

 

                  _workCompletedWasCalled = true;

            }

 

 

            [Test]

            public void TestDoWork()

            {

                  Assert.That(_doWorkWasCalled);

            }

 

            [Test]

            public void TestFormDisposed()

            {

                  Assert.That(_progressForm.IsDisposed);

            }

 

            [Test]

            public void TestSetupDone()

            {

                  Assert.That(_testSuiteSetupDone);

            }

 

            [Test]

            public void TestWorkCompleted()

            {

                  Assert.That(_workCompletedWasCalled);

            }

 

            [Test]

            public void TestWorkerDisposed()

            {

                  Assert.That(_workerDisposed);

            }

      }

}

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

_______________________________________________
Nunit-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nunit-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.