2 つのスレッドがあり、それぞれが 2 つのスレッドを実行していますが、エラーは表示されません。しかし、一緒に実行すると、backgroundWorker2 のヒント: null を複製できません.....(変数 J の値が 100 より大きいことを確認します)。この場合、グローバル変数をロックするにはどうすればよいですか?
Bitmap img; //global variable
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int i = 0;
do
{
img = (Bitmap)Image.FromFile(@"i:\1.jpg");
img.Dispose();
i++;
backgroundWorker3.ReportProgress(i,"");
Thread.Sleep(10);
} while (!backgroundWorker4.CancellationPending);
}
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
int j= 0;
do
{
//img = (Bitmap)Image.FromFile(@"i:\1.jpg");
if (img != null)
{
lock (img)
{
Bitmap tempImg = (Bitmap)img.Clone();
}
}
j++;
backgroundWorker4.ReportProgress(j, "");
Thread.Sleep(10);
} while (!backgroundWorker4.CancellationPending);
}