Я сделал приложение 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:
Скажите, что сделать, чтобы все работало корректно?
Единственное что видно из стектрейса - то, что вы где-то в Часы.Form1.clearfg создаете Graphics (используете какой-то заранее созданный) и что-то перерисовываете. Не делайте так. Вызывайте в обработчике таймера Invalidate, код отрисовки перенесите в обработчик Form1.OnPaint. В OnPaint в EventArgs вам придет готовый и точно рабочий Graphics.
Предложено в качестве ответаI.Vorontsov24 декабря 2009 г. 5:52
Помечено в качестве ответаI.Vorontsov25 декабря 2009 г. 8:14