[ mega_michulin @ 29.08.2008. 08:38 ] @
Napravia sam aplikaciju koja se na pritisak botuna minimize spusta u system tray i tamo je predstavljen sa ikonicom.Desnim klikom otvara se meni u kojem je opcija Exit koja gasi aplikaciju.Problem je u tome sta kada stisnem Exit aplikacija se izgazi ali ikonica koja reprenzentira apliukaciju i dalje stoji u system tray-u.Tek kada postavim kursor misa povise ikonice ona nestaje.Citao sam nesto da je to problemi radi nekog bug-a u Windowsima.Dali mozda neko zna dali ima kakv kod s kojim bi se to moglo rijesit?
[ mmix @ 29.08.2008. 09:08 ] @
Moras pri izlasku iz aplikacije da eksplicitno izgasis ikonicu u tray-u, ako to ne uradis, ona ostaje. Razlog je sto ta ikonica u tray-u ne pripada tvojoj aplikaciji (system tray je posebna aplikacija koja ima svoje handlove) pa gasenje tvoje aplikacije ne ubija automatski handlove u drugim aplikacijama i tek kad misem predjes preko ikonice system rtay provali da tvoja aplikacija vise ne postoji i ukloni ikonicu.

[ Shadowed @ 29.08.2008. 09:31 ] @
E, taj bug (ili "feature") postoji od kada i Windows... Ne znam zasto MS ne namesti da systray proverava svake sekunde ili malo cesce to postojanje aplikacije. Ne verujem da je to nesto zahtevna funkcija (nestane trenutno prilikom prelaska misem, cak i kada je komp opterecen).
[ mega_michulin @ 29.08.2008. 10:38 ] @
@mmix: A reci mi kako cu eksplicitno ugasit ikonicu u system tray-u jer koiko ja vidin nema niti jedna metoda s kojom bi moga ugasit ikonicu, jedino sta sam uspija je prije gasenja stavit svojstvo Visible na false i samim time uklonit ikonicu ali samo visualno ali ona tada vjerojatno i dalje postoji u system tray-u.
[ X Files @ 29.08.2008. 11:17 ] @
Eh taj tray, pun bugova... Možda ovako:

http://www.codeproject.com/KB/cs/trayiconmenu01.aspx
Citat:

A small problem

Now you'll notice a slight annoyance. The tray icon does not vanish when you exit the program. But when you move the mouse over the tray the icon vanishes. So, what do we do to avoid that? Again as with everything else with this whole .NET thing, it's as easy as 1,2,3. Override your form object's Dispose function and put the following lines of code into it.
Code:

protected override void Dispose( bool disposing ) 

    if( disposing ) 
    { 
        this.m_notifyicon.Dispose(); //we dispose our tray icon here

    }
    base.Dispose( disposing );
}

[ mega_michulin @ 29.08.2008. 11:31 ] @
Zahvaljujen se svima na pomoci,upotrebija san ovo zadnje rijesenje i radi mi sve kako triba.Al mi nije jasno zasto isto rijesen je nije upotrebljeno i u drugim aplikacijama npr. msn ima isti problem...
[ X Files @ 29.08.2008. 12:19 ] @
Tray je poprilično pokriven bugovima i većina tray implementacija koristi zaobilazna rešenja za otklanjanje raznih anomalija. M$ naravno zna za sve to odavno i svakako znaju to da poprave. Ipak, tada postoji realna mogućnost da razne tray implementacije (na kojima je zasnovano ko zna koliko aplikacija) više ne rade kako je očekivano, jer taj zaobilazni kod može da se u novom kontekstu manifestuje na razne neželjene načine. Toggle efekat, dvostruke destrukcije delova memorije i sl.

Sad je pitanje: držati se principa (po cenu tih sitnih bugova) i biti siguran da je to pravi način koji će 100% raditi u budućnosti nakon svih korekcija na tray kodu, ili ići na workaround rešenja pa dorađivati po potrebi.

Inače, primetio sam da su mnoge M$ verifikovane aplikacije (Media player, Windows Defender, Msn) imale identične problema sa trayom. Ovo mi sve govori da najverovatnije koriste isti kod, a da je neko tamo odlučio da ga iz određenih razloga ne menja. Jbg, kad bi u M$-u svako pisao kod kako želi, verovatno ne bi bili M$ nego, khm...
[ mmix @ 29.08.2008. 12:45 ] @
U principu, u ovom scenariju je svejedno dal se radi preko Dispose paterna ili preko Visible = false, zato sto se gasi aplikacija (NotifyIconNativeWindow koji se koristi za primanje poruka od system tray-a ima finalizer koji ce odraditi ono sto Dispose() uradi), razlog zbog kojeg ikonica ostaje je sto NotifyIcon nema finalizer koji bi pozvao njegov Dispose i postavio Visible na false, a setter Visible propertija je lokacija koja salje Shell_NotifyIcon system tray-u. Sam sistem tray klonira handle iconice, pa cak i kad finalizer .net klase unisti native window i handle ikonice, ostaje klon u system tray-u koji se ne sklanja sam, jedini nacin da system tray zna da treba da ukloni ikonicu je ako mu se posalje poruka da to uradi preko Shell_NotifyIcon (tad i handle klona ikone bude unisten) ili ako proba da posalje poruku u NotifyIconNativeWindow i ne uspe (posto je handle prozora unisten). Nije to nikakav bug, tako funkcionise system tray, i sve aplikacije koje za sobom ostavljaju ikonice (ukljucujuci i MSove) zapravo ne postoju proces rada sa system tray-om.