求助:问题很难用标题说明,请进来看看,在线等待。


我在MDI窗体模式下,分别调用两个子窗体,每个子窗体中,都有图形显示的情况,采用的是GDI+技术,实现时时绘图,可是,在两个子窗体间切换时,就报错误:
”未处理的System.Runtime.InteropServices.ExternalException“类型的异常出现在”system.drawing.dll“中”。其他信息:GDI+中发生一般性错误。

请问哪位能帮忙解决一下,本人无限感激。

16 个解决方案

#1


1.异常捕捉

2.贴下画图代码

#2


帮顶

#3


帮顶

#4


是你代码里调用dll时有不对的地方,所以才抛异常.
自己好好检查下代码吧.

#5


在你的onpaint里面加这样一句

// adjust 
if (e.ClipRectangle.IsEmpty)
return ;

#6


总共用了两个DLL
[DllImport("kernel32")]     
public   static   extern   void   GlobalMemoryStatus(ref   MEMORY_INFO   meminfo);

[StructLayout(LayoutKind.Sequential)]

#7


估计是不是因为你的程序是实时绘图,而在窗体切换的时候触发了绘图的动作,但因为当前运行的窗体已经切换.所以才产生EXCEPTION.具体还是要进行异常跟踪才能确切.

#8


目前的情况是,我设置了错误捕捉,也跳不到Catch,就直接报错了

#9


每次子窗体切换时,我只是把其中一个不显示的visiable=false

#10


因为其中一个的clientrectangle的大小为Empty,所以你操作这个Rectangle就要报这个错误

#11


那该怎么解决呢?

#12


在切换的时候,要切换的子窗体的绘图过程之前发生错误

#13


跟你说了,是在调用DLL时出错的.捕获不了异常,异常发生在DLL内部,是你使用不当.
应该仔细检查一下代码.

#14


哦,这样啊,那我在检查一下代码

#15


//获取内存的使用情况
[DllImport("kernel32")]     
public   static   extern   void   GlobalMemoryStatus(ref   MEMORY_INFO   meminfo);
private void getMemoryInfo()
{
    MEMORY_INFO MemInfo;     
    MemInfo=new MEMORY_INFO();     
    GlobalMemoryStatus(ref MemInfo); 
    lb1.Text=MemInfo.dwMemoryLoad.ToString()+"% 的内存正在使用";     
    lb2.Text ="物理内存共有: "+MemInfo.dwTotalPhys/1024+"K";     
    lb3.Text="可使用的物理内存有: "+MemInfo.dwAvailPhys/1024+"K";     
    lb4.Text="交换文件总大小为: "+MemInfo.dwTotalPageFile/1024+"K";     
    lb5.Text="尚可交换文件大小为: "+MemInfo.dwAvailPageFile/1024+"K";     
    lb6.Text="总虚拟内存有: "+MemInfo.dwTotalVirtual/1024+"K";     
    lb7.Text="未用虚拟内存有: "+MemInfo.dwAvailVirtual/1024+"K";  
    float memory=MemInfo.dwTotalPageFile/1024/1024*pcM.NextValue()/100;
    stBar.Panels[2].Text=String.Format("内存使用: {0}M/{1}M",memory.ToString("0"),MemInfo.dwTotalPageFile/1024/1024);
}
StructLayout(LayoutKind.Sequential)]     
public   struct   MEMORY_INFO   
{     
public   uint   dwLength;     
public   uint   dwMemoryLoad;     
public   uint   dwTotalPhys;     
public   uint   dwAvailPhys;     
public   uint   dwTotalPageFile;     
public   uint   dwAvailPageFile;     
public   uint   dwTotalVirtual;     
public   uint   dwAvailVirtual;  
}

#16


就这里使用了dll.
to曾一刀:能帮忙给看看吗?
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告