我在timer事件中执行下面代码,每隔一秒执行一次。每当到1个多小时后就会出现异常:system.argumentexception,在system.drawing中。我看了代码,问题应该就出现在这里面,是资源没回收?还是其他什么问题?//-----------------------------Timer Interval=1000-------------------------
// 创建显示器的DC
IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);
// 从指定设备的句柄创建新的 Graphics 对象
Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);
// 创建只有一个象素大小的 Bitmap 对象
Bitmap bmp1 = new Bitmap(1, 1, gfxDisplay); // 从指定 Image 对象创建新的 Graphics 对象
Graphics gfxBmp1 = Graphics.FromImage(bmp1); // 获得屏幕的句柄
IntPtr hdlScreen = gfxDisplay.GetHdc();
// 获得位图的句柄
IntPtr hdlBmp1 = gfxBmp1.GetHdc(); BitBlt(hdlBmp1, 0, 0, 1, 1, hdlScreen, Convert.ToInt32(textBoxHPX.Text), Convert.ToInt32(textBoxHPY.Text), 13369376); // 释放屏幕句柄
gfxDisplay.ReleaseHdc(hdlScreen);
// 释放位图句柄
gfxBmp1.ReleaseHdc(hdlBmp1); Color temp1 = bmp1.GetPixel(0, 0); // 获取像素的颜色
if (temp1.ToArgb().ToString("x").ToUpper() != textBoxHPColor.Text)
{
if (checkBoxPad1.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD1);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD1);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad2.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD2);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD2);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad3.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD3);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD3);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad4.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD4);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD4);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad5.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD5);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD5);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad6.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD6);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD6);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad7.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD7);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD7);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad8.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD8);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD8);
}
}
textBoxHPColorShow.Text = temp1.ToArgb().ToString("x").ToUpper()+"|"+textBoxHPColor.Text; gfxDisplay.Dispose();
gfxBmp1.Dispose();
bmp1.Dispose(); // 释放 bmp 所使用的资源 //-----------------------------------------------------------------------
/*
[DllImport("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // 目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
int dwRop // 光栅的操作值
); [DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
*/
// 创建显示器的DC
IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);
// 从指定设备的句柄创建新的 Graphics 对象
Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);
// 创建只有一个象素大小的 Bitmap 对象
Bitmap bmp1 = new Bitmap(1, 1, gfxDisplay); // 从指定 Image 对象创建新的 Graphics 对象
Graphics gfxBmp1 = Graphics.FromImage(bmp1); // 获得屏幕的句柄
IntPtr hdlScreen = gfxDisplay.GetHdc();
// 获得位图的句柄
IntPtr hdlBmp1 = gfxBmp1.GetHdc(); BitBlt(hdlBmp1, 0, 0, 1, 1, hdlScreen, Convert.ToInt32(textBoxHPX.Text), Convert.ToInt32(textBoxHPY.Text), 13369376); // 释放屏幕句柄
gfxDisplay.ReleaseHdc(hdlScreen);
// 释放位图句柄
gfxBmp1.ReleaseHdc(hdlBmp1); Color temp1 = bmp1.GetPixel(0, 0); // 获取像素的颜色
if (temp1.ToArgb().ToString("x").ToUpper() != textBoxHPColor.Text)
{
if (checkBoxPad1.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD1);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD1);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad2.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD2);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD2);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad3.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD3);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD3);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad4.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD4);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD4);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad5.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD5);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD5);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad6.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD6);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD6);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad7.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD7);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD7);
System.Threading.Thread.Sleep(numpaddul);
} if (checkBoxPad8.Checked == true)
{
kk.MykeyDown((int)key.VirtualKeys.VK_NUMPAD8);
System.Threading.Thread.Sleep(200);
kk.MykeyUp((int)key.VirtualKeys.VK_NUMPAD8);
}
}
textBoxHPColorShow.Text = temp1.ToArgb().ToString("x").ToUpper()+"|"+textBoxHPColor.Text; gfxDisplay.Dispose();
gfxBmp1.Dispose();
bmp1.Dispose(); // 释放 bmp 所使用的资源 //-----------------------------------------------------------------------
/*
[DllImport("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // 目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
int dwRop // 光栅的操作值
); [DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
*/
我CreateDC后没有DeleteDC,所以出现上面问题了结帖,谢谢大家!