多线程操作如何锁定全局变量?

marklr 2013-09-13 09:23:48
以下两个线程分别单独操作的时候都不会出错,但同时启动之后,在 backgroundWorker2_DoWork 的这行出错 Bitmap tempImg = (Bitmap)img.Clone(); 提示 Clone的是空值,我究其原因是 if (img != null) 判断非空时,再继续运行下去,img已被backgroundWorker1_DoWork清空释放了资源,所以出错,请问类似这种情况,该如何锁定全局变量?



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);
}

...全文
216 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
1987andy 2013-09-13
  • 打赏
  • 举报
回复
设置一个全局锁,在需要对全局变量操作的地方用Lock锁住
游戏人间 2013-09-13
  • 打赏
  • 举报
回复
backgroundWorker1 这个里面也需要用lock

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧