提问人:trading_dog 提问时间:10/27/2023 最后编辑:trading_dog 更新时间:10/27/2023 访问量:41
System.ArgumentException:System.Drawing.Graphics.GetHdc()
System.ArgumentException System.Drawing.Graphics.GetHdc()
问:
我是一个低技能的业余程序员,我编写了一个程序,其功能可以在屏幕上获取像素的颜色。以下方法不是我自己写的。我的程序运行了大约 20 分钟,没有任何问题,并使用该功能来获取像素的颜色(数百或数千次调用)。但是在大约 20 分钟后,我的程序崩溃并出现以下错误(对不起,德语/完整错误见下文):
Anwendung: MyApp.exe
Frameworkversion: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
Ausnahmeinformationen: System.ArgumentException
bei System.Drawing.Graphics.GetHdc()
bei MyApp.ColorChecker.GetColorAtCheckPoint(Int32, Int32)
bei MyApp.MyAppMain+<Run>d__4.MoveNext()
....
我的代码:
Color colorAtCheckpoint = ColorChecker.GetColorAtCheckPoint(pos.X,pos.Y);
此代码是复制/粘贴的:(但大多数时候都像魅力一样工作)
public static Color GetColorAtCheckPoint(int checkpointX, int checkpointY)
{
screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
using (Graphics gdest = Graphics.FromImage(screenPixel))
{
using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
{
IntPtr hSrcDC = gsrc.GetHdc();
IntPtr hDC = gdest.GetHdc();
int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, checkpointX, checkpointY, (int)CopyPixelOperation.SourceCopy);
gdest.ReleaseHdc();
gsrc.ReleaseHdc();
}
}
//MessageBox.Show(new Form() { TopMost = true }, $"Color Found: " + screenPixel.GetPixel(0, 0));
return screenPixel.GetPixel(0, 0);
}
复制的代码是否有问题,或者system.drawing中是否存在可能的错误?
感谢您的帮助!
错误01:
Anwendung: MyApp.exe
Frameworkversion: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
Ausnahmeinformationen: System.ArgumentException
bei System.Drawing.Graphics.GetHdc()
bei MyApp.ColorChecker.GetColorAtCheckPoint(Int32, Int32)
bei MyApp.MyAppMain+<Run>d__4.MoveNext()
bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
bei System.Runtime.CompilerServices.TaskAwaiter.GetResult()
bei MyApp.MainWindow+<Start>d__15.MoveNext()
bei System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
bei System.Windows.Threading.DispatcherOperation.InvokeImpl()
bei System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
bei MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
bei System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
bei MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
bei System.Windows.Threading.DispatcherOperation.Invoke()
bei System.Windows.Threading.Dispatcher.ProcessQueue()
bei System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
bei MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
bei MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
bei System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
bei System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
bei System.Windows.Application.RunDispatcher(System.Object)
bei System.Windows.Application.RunInternal(System.Windows.Window)
bei System.Windows.Application.Run(System.Windows.Window)
bei System.Windows.Application.Run()
bei MyApp.App.Main()
错误02:
Name der fehlerhaften Anwendung: MyApp.exe, Version: 1.0.0.0, Zeitstempel: 0x84c44dec
Name des fehlerhaften Moduls: KERNELBASE.dll, Version: 10.0.19041.3570, Zeitstempel: 0xfaa05682
Ausnahmecode: 0xe0434352
Fehleroffset: 0x0013d982
ID des fehlerhaften Prozesses: 0x4fc
Startzeit der fehlerhaften Anwendung: 0x01da07e229d3bede
Pfad der fehlerhaften Anwendung: C:\Program Files\MyApp\MyApp.exe
Pfad des fehlerhaften Moduls: C:\Windows\System32\KERNELBASE.dll
Berichtskennung: 099f4e2d-fce9-4d2f-8678-5a54bdffa50c
Vollständiger Name des fehlerhaften Pakets:
答: 暂无答案
上一个:WCF 错误日志记录在服务边界
下一个:如何捕获特定于包的异常?
评论
screenPixel
using