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