Try, declaring that flag as static volatile bool as described in Michael's
post
(
http://laflour.spaces.msn.com/blog/cns!7575E2FFC19135B4!322.entry?_c11_blogpart_blogp art=blogview&_c=blogpart#permalink )
I did exactly the same. When i use 2000 as parameter for Join() everything
is ok.
Problem is that without this Join never returns to caller thread.
Maybe you could shortly look at my thread. Maybe iam dooing some kind of
crical error:
private void downloadMethod()
{
long store = 0 ;
BinaryWriter file = null ;
Stream FileStream = null ;
byte[] buffer = new byte[256] ;
Int32 bufferCount = 0 ;
try
{
HttpWebRequest request = null;
HttpWebResponse response = null;
request = (HttpWebRequest)WebRequest.Create(FullPath);
request.Headers.Clear();
request.ProtocolVersion = HttpVersion.Version11;
response = (HttpWebResponse)request.GetResponse();
FileStream = response.GetResponseStream();
file = new BinaryWriter(File.Create(@"d:\\FM\\" +
fileName));
while ((bufferCount = FileStream.Read(buffer, 0, 256)) > 0
&& !disposing)
{
store += bufferCount;
file.Write(buffer, 0, bufferCount);
}
file.Close();
response.Close();
exitDelegate myDeleg = new exitDelegate(exitForm);
this.Invoke(myDeleg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
exitDelegate myDeleg = new exitDelegate(exitForm);
this.Invoke(myDeleg);
}
private void exitForm()
{
if (!disposing)
{
this.Dispose();
}
}
and the most important one:
protected override void Dispose(bool disposing)
{
disposing = true;
if (!downloadThread.Join(2000))
{
downloadThread.Interrupt();
downloadThread.Join();
}
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
disposing is static and volatile like you said.
Would be really gratefull even for finding mistake ;)
PK