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

C#LearningTutorial-SimultaneousAccesstoObjectson2ThreadsSharing

时间:2023-04-11 10:27:50 C#

SimultaneousAccesstoObjectson2Threads我有一个带有2个线程的c#应用程序。一个线程正在创建一个对象,而同一对象正在第二个线程中使用。大多数时候它工作正常,但它给了一些时间和错误Objectisinusecurrentlyelsewhere.如何让线程并发使用对象?谢谢编辑我正在访问位图对象。第一个线程从流中创建这个Bitmap,将其显示在PictureBox上,第二个线程再次将这个Bitmap转换为Byte并在网络上传输。您的基本方法是锁定对象(与共享对象的1-1关系)和锁定语句:MyObjectshared=...;对象储物柜=新对象();//threadAlock(locker){//use'shared'}//threadBlock(locker){//use'shared'}如果在编辑后以任何方式转换位图,最好忘记并行性。这是一个具有自己内部锁定的复杂类。不要使用未经转换的位图。为PictureBox和传出流分叉传入流会更容易(不是微不足道的)。错误消息的语言让它听起来像是来自GDI子系统或类似的东西。这是一个GUI应用程序吗?如果是,最可能的原因是您正在从“非GUI”线程访问GUI元素。对于初学者来说,任何GUI控件(例如表单或按钮)上的所有操作都必须通过其消息泵发送给它。if(form.InvokeRequired){form.BeginInvoke(你的操作方法);}else{(同样的操作方法);我正在访问一个Bitmap对象。第一个线程是从流中创建这个Bitmap,将其显示在PictureBox上,第二个线程将这个Bitmap再次转换为Byte并在网络上传输。从多个线程访问Bitmap对象不会导致InvalidOperationException。如果您同时从同一个实例写入和读取,它可能会损坏您的数据,但据我所知,Bitmap不强制执行特定的线程模型。另一方面,PictureBox有,因此我怀疑您正试图从非GUI工作线程读取或写回PictureBox实例。每次其中一个线程使用它时,您都需要锁定该变量。因此:对象mylock;lock(mylock){//dosomethingwithobject}//lockscopefinishesheremylockisusedbyeverylockthataccessingthisparticularvariable.以上就是C#学习教程:在2个线程上同时访问对象共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: