none
예외처리 문제(System.AccessViolationException이(가) 처리되지 않았습니다) 관련 의문점 RRS feed

  • 질문

  • VB 2010에서 다음과 같은 코드를 실행하면, 실행이 잘 되는 컴퓨터와

    "System.AccessViolationException" 발생되며 실행이 안되는 컴퓨터가 있는데...

    해결 방법이 궁금합니다.

        의문사항 1 : 사각형은 정상으로 그려지며 애니메이션도 정상적으로 잘 되나,

                          타원은 컴퓨터 마다 비정상/정상 ... 왜 이런 일이 ??

        의문사항 2 : 예외처리 방식(Try ... Catch ... Finally)를 이용하여

                        "System.AccessViolationException" 발생을 감지하여

                         근본적인 문제점을 해결하는 방법은 없는 지 ???

    ------------------------------------------------------------------------------------------------------------------------------

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
            Dim formGraphics As System.Drawing.Graphics
            formGraphics = Me.CreateGraphics()
            formGraphics.FillEllipse(myBrush, New Rectangle(0, 0, 200, 200))         '타원은 컴 마다 정상 또는 에러...

            'formGraphics.FillRectangle(myBrush, New Rectangle(0, 0, 200, 300))   '사각형은 모든 컴에서 정상

            myBrush.Dispose()
            formGraphics.Dispose()

     End Sub

    -----------------------------------------------------------------------------------------------------------------------------------

    참고로....  [에러 도우미] 기능으로 확보한  예외처리에 대한 정보입니다~~~

    System.AccessViolationException이(가) 처리되지 않았습니다.
      Message=보호된 메모리를 읽거나 쓰려고 했습니다. 대부분 이러한 경우는 다른 메모리가 손상되었음을 나타냅니다.
      Source=System.Drawing
      StackTrace:
           위치: System.Drawing.SafeNativeMethods.Gdip.GdipFillEllipseI(HandleRef graphics, HandleRef brush, Int32 x, Int32 y, Int32 width, Int32 height)
           위치: System.Drawing.Graphics.FillEllipse(Brush brush, Int32 x, Int32 y, Int32 width, Int32 height)
           위치: Animation_Ball_01.Animation_Ball_V21.Timer1_Tick(Object sender, EventArgs e) 파일 D:\Animation_Ball_01\Animation_Ball_01\Animation_Ball_V21.vb:줄 42
           위치: System.Windows.Forms.Timer.OnTick(EventArgs e)
           위치: System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
           위치: System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           위치: System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           위치: System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
           위치: System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           위치: System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           위치: System.Windows.Forms.Application.Run(ApplicationContext context)
           위치: Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
           위치: Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
           위치: Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
           위치: Animation_Ball_01.My.MyApplication.Main(String[] Args) 파일 17d14f5c-a337-4978-8281-53493378c1071.vb:줄 81
           위치: System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
           위치: System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           위치: Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           위치: System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
           위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           위치: System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    -----------------------------------------------------------------------------------------------------------------------------------------

    2013년 11월 27일 수요일 오전 3:18

답변

  • 해당 실행파일을 윈7 이후버젼에서는 마우스 우클릭후 관리자권한으러 실행 또는
    btnClick 폼이벤트인데 아마도 exe 파일 실행시에 이야기인것으로 보아서는 메모리 불확정 접근으로 간주해서 Smartscreen 등에서 제어들어갔거나 방화벽에서 차단을 야기했을 수 있을것 같습니다.

    [참조자료]

    예외 문제 해결: System.AccessViolationException

    제시해 드린 답변이 도움이 되었기를 바랍니다.
     
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2013년 11월 27일 수요일 오전 7:00
    중재자