当前位置: 首页 > 编程语言 > C#

C#锁(mylocker)不起作用分享

时间:2023-04-10 20:05:04 C#

我想同步绘图方法。所以我使用了以下内容,但是,从我在VisualStudio中跟踪的内容来看,每个锁都成功,并且有许多clearcommentIfany的多线程运行,绘图。我无法弄清楚楚为什么不能按期工作!谢谢privatereadonlyobjectlocker=newobject();voidProcessPlot(){lock(locker){Debug.WriteLine("currentThreadID:"+Thread.CurrentThread.ManagedThreadId);//Helper.Dispatcher.Invoke(newAddClearCommentDelegate(ClearCommentIfAny));ClearCommentIfAny();if(Response.status!=Status.COMPLETE){ErrorMessage=ManipulateStatusMsg(Response);//Helper.Dispatcher.Invoke(newAddClearCommentDelegate(AddCommentToCell));AddCommentToCell();}else//COMPLETE{//TODO:将其转换为工厂模式Debug.WriteLine("ReportBuilder.Dispatcher'saddress"+Helper.GetAddress(Helper.Dispatcher));//Helper.Dispatcher.Invoke(newPlotDelegate(Plot),Response);情节(回应);}}}publicvoidDataRequestJobFinished(DataRequestResponseresponse){try{if(Request.IsRequestCancelled){Request.FormulaCell.Dispose();返回;}响应=响应;//if(response.status!=Status.COMPLETE)//{//ErrorMessage=ManipulateStatusMsg(回复);//}//else//完成//{////TODO:将其转换为工厂模式//PlotDelegateplotDelegate=Plot;//Debug.WriteLine("ReportBuilder.Dispatcher的地址"+Helper.GetAddress(Helper.Dispatcher));//Helper.Dispatcher.Invoke(plotDelegate,response);////绘图(响应);//}vart=newThread(ProcessPlot);t.开始();//过程图();}catch(Exceptione){ErrorMessage=e.Message;MIMICShared.Helper.LogError(e);}finally{//TODO:PutReportBuilderInQueue(this);ReadyForPlot=true;//Request.FormulaCell.Dispose();在plotUnityContainer.Resolve().GetEvent().Publish(ID);之后移动它我怀疑你的问题是你的锁是一个实例成员而不是静态(类型级别)成员假设每个线程都有自己的包含类的实例,那么它也将有自己的储物柜实例-这不是你想要什么。试试这个声明:privatestaticreadonlyobjectlocker=newobject();现在包含static关键字使该对象实例存在于类型级别,即在该类的所有实例之间共享。你必须使对象静态。privatestaticreadonlyobjectlocker=newobject();目前,这个类的每个实例(以及每个线程)都有自己的储物柜实例。以上就是C#学习教程的全部内容:C#锁(mylocker)不起作用。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢