Я переводил коды с VB6 на VB .NET.System.Drawing.dll бросил необработанное исключение типа «System.ArgumentException», когда используется Graphics.GetHdc
Вот код VB6:
retval = BitBlt(Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, jdc, 0, 0, SRCCOPY)
Эквивалентный код VB .NET является:
Dim gr As Graphics = Picture1.CreateGraphics()
Dim hdc As IntPtr = gr.GetHdc()
g_variable3D.retval = BitBlt(hdc, 0, 0, Picture1.Width, Picture1.Height, g_variable3D.jdc,
0, 0, TernaryRasterOperations.SRCCOPY)
Когда я бегу коды, я получил сообщение об ошибке от:
Dim hdc As IntPtr = gr.GetHdc()
В сообщении об ошибке указано:
Необработанное исключение типа «System.ArgumentException» произошло в System.Drawing.dll. Дополнительная информация: Параметр недействителен.
Вот трассировки стека:
StackTrace:
at System.Drawing.Graphics.GetHdc()
at frm3D.vb:line 313
at frm3D.Picture1_MouseMove(Object sender, MouseEventArgs e) in frm3D.vb:line 1176
at System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseMove(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at My.MyApplication.Main(String[] Args) in :line 81
InnerException:
Я проверил различные сайты и форумы, но я не мог найти ключ на решение этой проблемы.
Как я могу справиться с этим исключением? Какой параметр здесь недействителен?
Привет, я добавил ReleaseHdc(), чтобы освободить контекст устройства, но объекты GDI в диспетчере задач все еще увеличиваются, а мой код разбился на GetHdc. Я прикрепил отредактированные коды ниже для справки. дим HDC Как IntPtr = g.GetHdc g_variable3D.retval = BitBlt (HDC, 0, 0, Picture1.Width, Picture1.Height, g_variable3D.jdc, 0, 0, TernaryRasterOperations.SRCCOPY) g.ReleaseHdc (HDC) 'важно вывести дескриптор в контекст чертежа End Using – hunterex
Вот почему я рекомендовал использовать диспетчер задач, утечка, подобная этому, почти никогда не изолирована от одной ошибки. Комментируйте фрагменты кода, чтобы найти другие. Убедитесь, что g_variable3D.jdc очищается должным образом. Убедитесь, что растровые изображения удаляются. Etcetera. –