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

解决方案 »

  1.   


    嗯,找到了,调试状态下,DEBUG->WINDOWS下面  我在等他报错这个堆栈能看出什么原因么
      

  2.   


    CommonConver.DLL!CommonConver.OcxForm.DeleteallImage() Line45+0x11 bytes
    CommonConver.DLL!CommonConver.PublicConver.GetPathValue.AnonymousMethod(object args={CommonConver.PublicConver.PathData}) Line 69 + 0xa bytes
    这个是报错的时候的堆栈信息
      

  3.   

    找到 CommonConver.DLL!CommonConver.OcxForm.DeleteallImage()
    这个方法,贴出45行和前后的代码。
      

  4.   

    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之后,里面的那个地方就报错了
      

  5.   

    不要在线程中操作控件,而应该使用Invoke委托http://www.cnblogs.com/guozhijian/archive/2008/01/23/1050193.htmlhttp://msdn.microsoft.com/zh-cn/library/a1hetckb(v=vs.80).aspx
      

  6.   

    碰到过类似的问题,尝试了很多方法,包括invoke都未能圆满解决,查了很多资料后,最终用异步BeginInvoke操作界面的控件,目前该软件一直运行良好
      

  7.   

    自己调试吧,看看
    ocxf.DeleteallImage();  //调用这个 里面会报错
    是做什么的,count=ocxf.GetImages();count的值是怎么来的。
    就给这么一小段代码又使用了其他的函数,别人也很难帮你找
      

  8.   


    我写了个测试demo 循环调用100次都没有问题