我在MDI窗体模式下,分别调用两个子窗体,每个子窗体中,都有图形显示的情况,采用的是GDI+技术,实现时时绘图,可是,在两个子窗体间切换时,就报错误:
”未处理的System.Runtime.InteropServices.ExternalException“类型的异常出现在”system.drawing.dll“中”。其他信息:GDI+中发生一般性错误。
请问哪位能帮忙解决一下,本人无限感激。
16 个解决方案
是你代码里调用dll时有不对的地方,所以才抛异常.
自己好好检查下代码吧.
总共用了两个DLL
[DllImport("kernel32")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
和
[StructLayout(LayoutKind.Sequential)]
估计是不是因为你的程序是实时绘图,而在窗体切换的时候触发了绘图的动作,但因为当前运行的窗体已经切换.所以才产生EXCEPTION.具体还是要进行异常跟踪才能确切.
目前的情况是,我设置了错误捕捉,也跳不到Catch,就直接报错了
每次子窗体切换时,我只是把其中一个不显示的visiable=false
因为其中一个的clientrectangle的大小为Empty,所以你操作这个Rectangle就要报这个错误
在切换的时候,要切换的子窗体的绘图过程之前发生错误
跟你说了,是在调用DLL时出错的.捕获不了异常,异常发生在DLL内部,是你使用不当.
应该仔细检查一下代码.
//获取内存的使用情况
[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;
}
就这里使用了dll.
to曾一刀:能帮忙给看看吗?