none
Ошибка в GDI+ при изменении ShowInTaskbar RRS feed

  • Вопрос

  • Я сделал приложение Windows Form с GDI+. В ходе программы приходилось менять свойство ShowInTaskbar формы с графикой. При последуешем обрашении к объекту Graphics выбрасывается исключение "System.Runtime.InteropServices.ExternalException не обработано" (при отладке) и сообщение (при работе без отладки) "В GDI+ возникла ошибка общего вида." Попробовал создать другое приложение с GDI+ и изменением ShowInTaskbar, последствия анологичные.
    Подробные сведения (при отладке скопировал сведения об исключении):

    System.Runtime.InteropServices.ExternalException не обработано
      Message="В GDI+ возникла ошибка общего вида."
      Source="System.Drawing"
      ErrorCode=-2147467259
      StackTrace:
           в System.Drawing.Graphics.Clear(Color color)
           в Часы.Form1.clearfg() в Form1.cs:строка 247
           в Часы.Form1.t_Tick(Object sender, EventArgs e) в Form1.cs:строка 203
           в 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(Int32 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(Form mainForm)
           в Часы.Program.Main() в Program.cs:строка 18
           в System.AppDomain._nExecuteAssembly(Assembly 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)
           в System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    Скажите, что сделать, чтобы все работало корректно?
    20 декабря 2009 г. 12:40

Ответы

  • Единственное что видно из стектрейса - то, что вы где-то в Часы.Form1.clearfg создаете Graphics (используете какой-то заранее созданный) и что-то перерисовываете. Не делайте так. Вызывайте в обработчике таймера Invalidate, код отрисовки перенесите в обработчик Form1.OnPaint. В OnPaint в EventArgs вам придет готовый и точно рабочий Graphics.
    • Предложено в качестве ответа I.Vorontsov 24 декабря 2009 г. 5:52
    • Помечено в качестве ответа I.Vorontsov 25 декабря 2009 г. 8:14
    23 декабря 2009 г. 13:12