私はしばらくの間バックグラウンドワーカーと格闘してきましたが、bwでできることには限界があるのではないかと思い始めています。ProgressChanged
メソッドを使用してUIを更新しながら、bwを使用してTCPIP交換を処理しようとしています。UIの更新は問題ないことはわかっていますが、私のDoWork
ルーチン(以下に表示)により、bwスレッドが消えたり動作を停止したりすることがあります。他の誰かがこの問題を抱えていましたか?
private void TCPIP_DoWork(object sender, DoWorkEventArgs e)
{
int a = 0;
s.Send(System.Text.Encoding.ASCII.GetBytes("s"));
if (worker.CancellationPending == true)
{
s.Send(System.Text.Encoding.ASCII.GetBytes("t"));
}
else
{
try
{
a = s.Available;
s.Receive(bytes);
Thread.Sleep(25);
using (Stream fileStream = new FileStream(@sbpFile.Text,
FileMode.Append, FileAccess.Write, FileShare.None))
{
using (BinaryWriter bw = new BinaryWriter(fileStream))
{
if (a == 0)
Thread.Sleep(20);
else if (a < 1023)
{
bw.Write(bytes, 0, a);
Thread.Sleep(20);
}
else
{
bw.Write(bytes, 0, 1024);
Thread.Sleep(20);
}
}
}
}
catch(Exception e)
{
Console.WriteLine("{0} Exception.", e);
}
}
}
注:これらのThread.Sleep()操作が含まれている唯一の理由は、bwがそれ自体につまずかないようにするための一時的な修正であると思われるためです...