Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Проблема с notifyIcon


Автор: Torgovec 29.11.2007, 13:30
Есть программка, которая при опред. условиях сменяет значок в трее, значок берется из imageList'а.
Присваивание выполняется след. функцией:

Код

this.notifyIcon1.Icon = Icon.FromHandle(((Bitmap)imageList1.Images[0]).GetHicon());


Проблема состоит в том, что когда я прихожу по утрам на работу я вижу ошибку этого приложения, которая выглядит так:
Код

System.Runtime.InteropServices.ExternalException was unhandled
  Message="A generic error occurred in GDI+."
  Source="System.Drawing"
  ErrorCode=-2147467259
  StackTrace:
       at System.Drawing.Bitmap.GetHicon()
       at ChangingForms.Form1.timer1_Tick(Object sender, EventArgs e) in D:\temp\ConnectionChecker\ConnectionChecker\Form1.cs:line 35
       at System.Windows.Forms.Timer.OnTick(EventArgs e)
       at System.Windows.Forms.Timer.TimerNativeWindow.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(Int32 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 System.Windows.Forms.Application.Run(Form mainForm)
       at ChangingForms.Program.Main() in D:\temp\ConnectionChecker\ConnectionChecker\Program.cs:line 17
       at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()


Самый прикол состоит в том, что во время рабочего дня, это ни разу! не проявлялось, у меня есть подозрение, что ошибка проявляется только когда комп "залочен"(сочетание клавиш Win+L), именно в таком состоянии я оставляю его уходя с работы.

Я пробовал менять иконку в трее вот таким способом:
Код

this.notifyIcon1.Icon = Icon.FromHandle(((Bitmap)imageList1.Images[imageList1.Images.IndexOfKey("OK.ico")]).GetHicon());


Но в итоге получаю ту же ошибку...
Буду рад любым советам, т.к. над проблемой бьюсь уже давно.

Автор: Retro 1.12.2007, 12:55
Что-то ничего в голову не приходит, может может проблема с доступом, может нужно версию http://www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a&DisplayLang=en обновить ( по крайней мере так я прочитал на одном форуме ).

Прочитал интересную фразу:
Цитата

A "Generic error" is usually Microsofts way of saying "something is wrong, but we can't tell what, exactly."


Еще, с одного форума:
Цитата

Off the top of my head I would say, supply a full path for the file name and
also make sure that your application has write access that location.
Better yet Create a IO.FileStream object from the filename you want to save
and specify that you need write access, then save to the FileStream.




Автор: Torgovec 4.12.2007, 10:29
Цитата(Retro @  1.12.2007,  12:55 Найти цитируемый пост)
Что-то ничего в голову не приходит, может может проблема с доступом, может нужно версию GDI+ обновить ( по крайней мере так я прочитал на одном форуме ).

И действительно, после полного сноса VS2005 и всех его хвостов и установки VS2008 ошибка исчезла сама собой, спасибо Вам за совет про обновление.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)