Antologiko ha scritto:
mi piaceva capire con che meccanismo viene bloccato il codice chiamante per poi riprendere dall'istruzione successiva alla chiusura della finestra modale.
Non è nulla di arcano.
Il funzionamento tradizionale dell'applicazione si basa sulla gestione ripetitiva e ciclica dei messaggi che vengono inseriti da Windows all'interno di un'apposita coda, per essere poi trasformati in eventi e indirizzati ai rispettivi controlli.
Nel momento in cui chiami
ShowDialog(), il metodo invoca una routine che apre e imposta la finestra modale e si mette ciclicamente in ascolto su tutti i messaggi che provengono all'applicazione, dirottandoli però alla finestra modale.
Quel ciclo si interrompe solo quando la finestra viene chiusa, pertanto fino a quando la finestra è visibile, il controllo dell'esecuzione non esce dal ciclo e quindi non tornerà mai al metodo che ha invocato
ShowDialog().
Solo quando la finestra viene chiusa o si imposta un valore su
ModalResult il ciclo termina, il metodo conclude il proprio lavoro e il controllo passa al metodo chiamante, ossia al punto in cui è stato invocato
ShowDialog(), che così può proseguire.
Alka ha scritto:
Tranquillo, la domanda non cela alcun arcano fine . E' solo per il piacere di capire come funzionano le cose.
La mia domanda era riferita a quello strano accrocchio che chiamava ShowDialog() dentro un thread, come se dimostrasse qualcosa di diverso rispetto a ciò che ci si aspetta.
Ciao!