Article View: alt.pl.comp.lang.csharp
Article #21678Re: Własne okno dialogowe singleton, wywoływane z wątków?
From: Łukasz 'Maly' Ostrowski
Date: Fri, 09 Jul 2010 13:36
Date: Fri, 09 Jul 2010 13:36
73 lines
4058 bytes
4058 bytes
On Fri, 9 Jul 2010 13:46:44 +0200, gomis wrote: > Sam widzę, że mam ciągoty jak napisałeś typu: > >> var >> frmMain : TMainForm; Spodziewane ;-). > Też myślałem o wyrzucaniu okna dialogowego z głównego wątku, ale... znowu > pod górę. Nie wiem jak podpiąć się pod główny wątek. Musisz przerzucić execution context do wątku UI - robi się to właśnie za pomocą Invoke - powoduje to wrzucenie do kolejki komunikatów komunikatu który niesie ze sobą delegate'a na to co ma być wykonane w tymże wątku UI. > W Delphi jest > > Application.OnIdle:=MyOnIdle; // MyOnIdle - moja jakaś procedura > a dokładanie do Timerka wydaje się być mało estetyczne. To jest na pierwszy rzut oka ***bardzo zła metoda***. > Mam jeszcze jedne problem (aż wstyd powiedzieć, ale takie są początki) nie > wiem jak wymieniać dane między "niezależnymi" klasami. Pamiętaj że możesz klasy poinformować o swoim istnieniu, przekazując nawzajem "siebie" w konstruktorach. Tight-coupling jest dyskusyjny, ale jest prosty i szybki. ;-). > Jak już wcześniej przytoczona sławna konstrukcja >> var >> frmMain : TMainForm; > daje swobodę wymiany między formami to jedynie na tą modłę znalazłem > Singleton. Singleton, ServiceLocator, przekazanie sobie wzajemnie referencji, każda metoda działa. > Jeśli chodzi o wątek główny to myślałem o budowie klasy class MojeAlerty, do > której wątki wrzucały by txt do wyświetlenia a następnie a główny sprawdzał > by czy nie trzeba wyświetlić okna lub już otwarte okno zaktualizować nowym > tekstem. Lecz klasa MojeAlerty powinna mieć tylko jedną instancję w cały > programie a przekazywanie jej wskaźnika do innych klas a od tych klas do > innych klas ... przez konstruktora też mi się nie podoba. Jakbym nie > kombinował to przy obecnym stanie wiedzy najbardziej pasuje mi Singleton. Jest jakiś pomysł. Aczkolwiek naprawde w minimalistycznej wersji zrobić Invoke na main formie. I masz już bardzo ubogą namiastkę komunikacji z wątkiem UI. > Nie potrawie oderwać się (jeszcze nie wiem jak) od zmiennej globalnej. Nie musi być globalna, może być "pozornie lokalna" - prywatne/protected pole czegoś większego, hosta. Main form może być "jeden", ten sama form może zawierać dispatcher komunikatów Twoj, z którym komunikować się będą wątki które stworzył ten main form. Wtedy globalnym-pseudo-singletonem jest tylko rzeczony main form. > Wiem, że powinienem oprzeć się na delegatach, ale jeszcze tego nie czuję. Delegate to jest function/method pointer(z dodatkową obsługą multicast, w przeciwieństwie do eventów z Delphi). Odpowiednikiem, pi razy drzwi z Object Pascala jest: type TJakisDelegat = function(AArgument1 : integer)/* of class*/; Nic tu do czucia nie ma skomplikowanego, pytaj jeżeli nie rozumiesz. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Technical Details
Message-ID:
<174uedsaowxqe.1ktua6inflafc.dlg@40tude.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.task.gda.pl!news.dialog.net.pl!not-for-mailReferences:
<i16n72$pkd$1@news.task.gda.pl> <145nh32fpp3hh.pzydy3jgp3q4$.dlg@40tude.net> <i16upn$flp$1@news.task.gda.pl> <1kiaznfyb7y4e$.1qapzsrkhzesd.dlg@40tude.net> <i1727b$l75$1@news.task.gda.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.task.gda.pl!news.dialog.net.pl!not-for-mail From: Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: Własne okno dialogowe singleton, wywoływane z wątków? Date: Fri, 9 Jul 2010 15:36:42 +0200 Organization: Acme Lines: 73 Message-ID: <174uedsaowxqe.1ktua6inflafc.dlg@40tude.net> References: <i16n72$pkd$1@news.task.gda.pl> <145nh32fpp3hh.pzydy3jgp3q4$.dlg@40tude.net> <i16upn$flp$1@news.task.gda.pl> <1kiaznfyb7y4e$.1qapzsrkhzesd.dlg@40tude.net> <i1727b$l75$1@news.task.gda.pl> NNTP-Posting-Host: static-78-9-71-129.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1278682615 20940 78.9.71.129 (9 Jul 2010 13:36:55 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Fri, 9 Jul 2010 13:36:55 +0000 (UTC) User-Agent: 40tude_Dialog/2.0.15.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit