🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #21678

Re: Własne okno dialogowe singleton, wywoływane z wątków?

#21678
From: Łukasz 'Maly' Ostrowski
Date: Fri, 09 Jul 2010 13:36
73 lines
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-mail
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>

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