C# 尝试读取或写入受保护的文件

kxphzl 2012-12-19 06:38:21
C# 一个类A里面写了一个线程,线程里面是调用另外一个应用程序(此应用程序里面的窗体上放了一个C++写的控件)上放的控件里面的一些方法。线程里面调用完之后我都用窗体dispose()的.
一个类B频繁调用A里面的那个线程,但是时不时会报那个错误,
我感觉这个问题是因为我之前的窗体没释放掉,然后下一次又在用,但是不太确定。。。。 很急的问题,求解啊。。

稍后贴代码块。。。

...全文
11660 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
apache_zhang 2012-12-26
  • 打赏
  • 举报
回复
1、用异步; 2、加个读写信号链;
星火燎猿 2012-12-22
  • 打赏
  • 举报
回复
加锁试试看。
kxphzl 2012-12-21
  • 打赏
  • 举报
回复
单独对那个文件测试是没问题,不报错的,纠结啊,有没有人知道。。
kxphzl 2012-12-20
  • 打赏
  • 举报
回复
还是米有解决,郁闷啊。。。。。。。关键是找不到问题出在哪里。。
kxphzl 2012-12-20
  • 打赏
  • 举报
回复
引用 23 楼 xxdddail 的回复:
碰到过类似的问题,尝试了很多方法,包括invoke都未能圆满解决,查了很多资料后,最终用异步BeginInvoke操作界面的控件,目前该软件一直运行良好
我写了个测试demo 循环调用100次都没有问题
嘶吼的蚂蚁 2012-12-20
  • 打赏
  • 举报
回复
自己调试吧,看看 ocxf.DeleteallImage(); //调用这个 里面会报错 是做什么的,count=ocxf.GetImages();count的值是怎么来的。 就给这么一小段代码又使用了其他的函数,别人也很难帮你找
_学而时习之_ 2012-12-20
  • 打赏
  • 举报
回复
碰到过类似的问题,尝试了很多方法,包括invoke都未能圆满解决,查了很多资料后,最终用异步BeginInvoke操作界面的控件,目前该软件一直运行良好
cs张 2012-12-19
  • 打赏
  • 举报
回复
引用 16 楼 caozhy 的回复:
不要在线程中操作控件,而应该使用Invoke委托 http://www.cnblogs.com/guozhijian/archive/2008/01/23/1050193.html http://msdn.microsoft.com/zh-cn/library/a1hetckb(v=vs.80).aspx
大牛啊~~~~
cs张 2012-12-19
  • 打赏
  • 举报
回复
引用 11 楼 caozhy 的回复:
找到 CommonConver.DLL!CommonConver.OcxForm.DeleteallImage() 这个方法,贴出45行和前后的代码。
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
引用 16 楼 caozhy 的回复:
不要在线程中操作控件,而应该使用Invoke委托 http://www.cnblogs.com/guozhijian/archive/2008/01/23/1050193.html http://msdn.microsoft.com/zh-cn/library/a1hetckb(v=vs.80).aspx
多谢,我会测试下的.这个线程也是别人写的,我也不知道有没有问题
threenewbee 2012-12-19
  • 打赏
  • 举报
回复
不要在线程中操作控件,而应该使用Invoke委托 http://www.cnblogs.com/guozhijian/archive/2008/01/23/1050193.html http://msdn.microsoft.com/zh-cn/library/a1hetckb(v=vs.80).aspx
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
引用 13 楼 caozhy 的回复:
这个方法是在线程中调用的么?
上面是我调用报错的位置代码
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
namespace CommonConver { public static bool isconvert=false; public static void Main(strig[] args) {} public string ReturnPath(string dicomFileName,string saveaPath,string savejPath) { PathData PD=new PathData(); PD.DicomFileName=dicomFileName; PD.SaveAPath=saveaPath; PD.SaveJPath=savejPath; return GetPathValue(PD); } private sting GetPathValue(PathData data) { isconvert=tru; int cunt=0; sting stPath=string.Empty; System.Threading.Thread thread=new System.Threadig.Thread(delegate(object args) { OcxForm ocxf=new OcxForm(); ocxf.LoadImag(data.DicomFileName); count=ocxf.GetImages(); if(count==1) { strPath=(args as PathData).SaveJPath; ocxf.SaveImageFile(strPath); ocxf.DeleteallImage(); ocxf.Close(); ocxf.Dispose(); GC.Collect(); GC.Suppress.Finalize(ocxf); } else if (count>1) { string fileName=(args as PathData).SaveAPath; string strPath=fileName+".avi"; ocxf.SaveAVIFile(strPath); ocxf.DeleteallImage(); //调用这个 里面会报错 ocxf.Close(); ocxf.Dispose(); GC.Collect(); GC.Suppress.Finalize(ocxf); } else {} }); thread.SetApartmntState(System.Threading.ApartmentState.STA); thread.Start(data); while(isconvert) { System.Threading.Thread.Sleep(1000); } return strPath; } private class PathData { public string DicomFileName; pubilc string SaveJPath; public string SaveAPath; } } 另外一个类频繁调用ReturnPath方法,前面调用的几十个count=1的就没有问题,当走到count>1之后,里面的那个地方就报错了
threenewbee 2012-12-19
  • 打赏
  • 举报
回复
这个方法是在线程中调用的么?
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
threenewbee 2012-12-19
  • 打赏
  • 举报
回复
找到 CommonConver.DLL!CommonConver.OcxForm.DeleteallImage() 这个方法,贴出45行和前后的代码。
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
出现异常,把程序停下来,打开调用堆栈窗口,找到堆栈,把堆栈贴出来。
CommonConver.DLL!CommonConver.OcxForm.DeleteallImage() Line45+0x11 bytes CommonConver.DLL!CommonConver.PublicConver.GetPathValue.AnonymousMethod(object args={CommonConver.PublicConver.PathData}) Line 69 + 0xa bytes 这个是报错的时候的堆栈信息
kxphzl 2012-12-19
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
引用 5 楼 kxphzl 的回复:引用 4 楼 caozhy 的回复:出现异常,把程序停下来,打开调用堆栈窗口,找到堆栈,把堆栈贴出来。 VS2005 在哪里打开这个窗口啊,求指导 好久不用了,记不得了,你在视图和调试菜单下都找找看。
嗯,找到了,调试状态下,DEBUG->WINDOWS下面 我在等他报错。。。这个堆栈能看出什么原因么。。。
threenewbee 2012-12-19
  • 打赏
  • 举报
回复
引用 5 楼 kxphzl 的回复:
引用 4 楼 caozhy 的回复:出现异常,把程序停下来,打开调用堆栈窗口,找到堆栈,把堆栈贴出来。 VS2005 在哪里打开这个窗口啊,求指导
好久不用了,记不得了,你在视图和调试菜单下都找找看。
加载更多回复(5)

110,538

社区成员

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

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

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