…ancora sulla classe Process (System.Diagnostics)
Della serie: quando ci si aspetta che le cose funzionino in ben altro modo!
In sostanza, quando lanciamo dalla nostra applicazione .Net un altro processo tramite la classe Process, possiamo benissimo “schematizzare” il funzionamento come un thread che controlla l’andamento del programma concorrente.
Consideriamo il seguente codice allora.
OtherProcess = new Process();
OtherProcess.StartInfo.FileName = "OtherProcess.exe";
OtherProcess.StartInfo.Arguments = "/someParameters";
OtherProcess.Exited += delegate(object sender, EventArgs e) { otherProcessTerminated(); };
OtherProcess.EnableRaisingEvents = true;
OtherProcess.Start();
Nella situazione sopra proposta, una volta che l’applicazione OtherProcess.exe termina verrà lanciato l’evento Exited che porterà all’esecuzione del relativo delegate e, per finire, alla chiamata della funzione otherProcessTerminated.
E fin qui nulla da obbiettare. La domanda è: in che modo viene “gestito” l’evento? Mi sarei aspettato che venisse messo in coda e processato ordinatamente (nel Main thread) dopo quanti lo precedevano. In realtà ciò non avviene, ma è lo stesso thread creato appositamente dalla classe Process che si prende in carico anche l’esecuzione del delegate, generando delle “race condition” che portano a side effects quasi mai considerati in fase di sviluppo.
Come poter aggirare la cosa, che risulta assai sgradevole se si è fatto di tutto al fine di evitare problemi di concorrenza? Molto semplice: prima di invocare il metodo Start, aggiungete la seguente linea di codice.
OtherProcess.SynchronizingObject = this;
Ovviamente il puntatore this dovrà far riferimento ad un controllo WindowsForm in grado di “gestire” i messaggi (per dirlo con terminologia Win32).
Qui la documentazione relativa alla proprietà SynchronizingObject della classe System.Diagnostics.Process.
P.s.: per questo post si ringrazia il Sig. Botsutoshi per il suo indispensabile contributo.
L’evento Exited nella classe Process (System.Diagnostics)
Della serie: come perdere più di un mese di sviluppo per arrivare pure ad avere una soluzione a dir poco orribile!
Lasciamo perdere i vari ricorsi storici… parliamo invece del namespace System.Diagnostics. Tale “libreria” .Net contiene un’utilissima classe chiamata Process. Attraverso un oggetto di questo tipo possiamo lanciare “in parallelo” altri processi e, soprattutto, possiamo in qualche modo controllarne il loro avanzamento.
D’indubbia utilità è l’evento Exited: viene invocato quando il relativo processo termina permettendomi di mantenere l’applicazione chiamante “event oriented” ed evitando la necessità di realizzare un orribile polling a tempo (magari pilotato da qualche bel timer) al fine “checcare” lo stato dell’applicazione lanciata.
Attenzione però: tal evento viene generato solo se la proprietà EnableRaisingEvents viene precedentemente settata a true. La relativa documentazione nel portale MSDN è fatta bene, ma se, come me, non si legge con attenzione…
Ultimo evento del 2008 per 1nn0va
Ormai ci stiamo avvicinando alla fine di quest’anno, ma 1nn0va ha ancora voglia di proporre un’altro grande evento… come sempre gratuito ed aperto a tutti!
Giovedì 4 Dicembre 2008 presso il Polo Universitario di Pordenone
(Via Prasecco, 3/a 33170, Pordenone)

.NET Compact Framework
Contenuti:
- introduzione ai dispositivi mobili e il loro impatto nella vita quotidiana;
- strumenti di sviluppo e ultime tecnologie disponibili;
- introduzione al .NET Compact Framework, filosofia del framework, limiti e vantaggi;
- creazione di un programma per dispositivi mobili (demo);
- creazione di una form con i controlli base (demo);
- integrazione con “API” di sistema (P/Invoke) (demo);
- persistenza;
- multithreading, limiti e vantaggi;
- esempi (demo).
Agenda:
- 18:30 – Apertura Meeting
- 18:45 – Saluto ai partecipanti da parte dei presidenti delle community (Andrea Boschin e Marco Pozzan)
- 19:00 – .NET Compact Framework #1 (Mirco Vanini)
- 20:00 – Break
- 20:30 – .NET Compact Framework #2 (Mirco Vanini)
- 21:30 – Sessione Q&A
- 22:00 – Chiusura dei lavori
Prossimo grande evento di 1nn0va
Dopo mesi di inattività torno ad aggiornare il mio povero ed umile blog. Purtroppo gli impegni del periodo sono molti (sto tenendo un corso di Microsoft Office VISIO nelle sedi IAL di Pordenone e di Udine).
Mi preme però segnalarvi il prossimo super evento di 1nn0va: lo abbiamo chiamato WebCongress e prevede ben 4 ore di conferenze (3 interventi in totale)!
La serata è stata organizzata in strettissima collaborazione con i nostri amici di XeDotNet. Per l’eccezionalità dell’evento è stato anche “messo in piedi” un mini-sito ove potete trovare tutti i dettagli dei vari interventi, i relativi speaker, la location ed il modulo d’iscrizione.
Ovviamente e come sempre, la serata è aperta a tutti e la partecipazione è GRATUITA!
Il consiglio è, ovviamente, di non mancare!
Free E-BOOKs
E’ da un bel po’ che non aggiorno il mio umile blog… e non ho nemmeno pubblicato gli auguri per le feste natalizie! …sono uno scandalo
Mi sono ripromesso, per questo 2008, di scrivere almeno un post un giorno sì ed uno no: vediamo se riuscirò a mantenere tale media
Per farmi perdonare comincio col farvi un bel regalo… vi segnalo i seguenti e-book disponibili gratuitamente (previa registrazione) a questo url:
- Introducing Microsoft LINQ di Paolo Pialorsi e Marco Russo;
- Introducing Microsoft ASP.NET AJAX di Dino Esposito;
- Introducing Microsoft Silverlight 1.0 di Laurence Moroney.
Buona lettura a tutti!
Novità Microsoft .Net Framework 3.5 e Visual Studio 2008
Segnalo questo interessantissimo post di Raffaele Rialdi (MVP di Microsoft) che riporta una serie di utilissimi link per capire le novità del Microsoft .Net Framework 3.5 e del Visual Studio 2008. Come potrete leggere dal suo articolo, presto pubblicherà anche le novità riguardanti la programmazione nativa in C++ su Visual Studio 2008… e spero che le renda on-line quanto prima
Chi conosce Raffaele Rialdi può facilmente immaginare il livello di qualità dei link da lui segnalati













