Emanuele Mattei

Il blog di Emanuele Mattei.....il suo diario :-)

Blog Amici

Compact Framework

Web e win application

Siti Gratuiti

Siti Vari

Tools per .Net

Chi sono

elenco siti

febbraio 2006 - Posts

Chiudere un servizio creato in .Net, solo quando ha terminato tutte le operazioni

Trucco: Chiudere un servizio, creato in .Net (vb.NEt e C#) solo quando ha terminato tutte le operazioni Utilizzando il thread

 

Nel creare un servizio, a volte può capire l'esigenza che tale servizio deve rimanere attivo, fino a quando non ha eseguito tutte le operazioni (lettura, scrittura e salvataggio dati). Se viene digitato il pulsante stop del servizio, il programma si chiude, senza eventualmente aver eseguito tutte le operazione che voleva eseguire.

Di seguito si riporta del codice, per evitare tutto ciò.

Nella dichiarazione degli oggetti nella classe service, si crei un oggetto di tipo thread:

C#

private

System.Threading.Thread ServiceThread =

(System.Threading.Thread)

null;

VB.Net

Dim ServiceThread As System.Threading.Thread = CType(Nothing,System.Threading.Thread)

Nell'evento onStart del servizio, inizializziamo l'oggetto ServiceThread, creato in precedenza, passandogli come argomento un oggetto di tipo threadStart, il quale avvia la funzione di avvio delle varie operazioni.

C#

protected

override void OnStart(string[] args)

{

//oggetto di tipo threadSTart per gestire l'avvio della funzione

System.Threading.ThreadStart ts =

new System.Threading.ThreadStart(Avvia);

//il processo vero e proprio

ServiceThread = new System.Threading.Thread(ts);

ServiceThread.Start();

}

VB.Net

Protected Overrides Sub OnStart(ByVal args() As String)
        
'oggetto di tipo threadSTart per gestire l'avvio della funzione
        
Dim ts As System.Threading.ThreadStart = New 
System.Threading.ThreadStart(Avvia)
        
'il processo vero e proprio e poi eseguie la funzione avvia
        
ServiceThread = New 
System.Threading.Thread(ts)
        ServiceThread.Start
    
End Sub

A questo punto, il nostro servizio esegue le varie operazioni, nell'evento stop, verifichiamo che tutte le operazioni sono terminate, tramite un enumerato o variabile costruito in precedenza.

protected

override void OnStop()

{

                         bool

bEsci = false;

                         while

(bEsci == false )

                 {

                            ServiceThread.Join ();

 

                              switch (StatoServizio)

                                      {

                                                     case Terminato:

                                                               bEsci =

true;

                                                                break;

                                                         case Pausa:

                                                                  bEsci =

true;

                                                                break;

                                       }

                   }

              if

(ServiceThread.IsAlive) ServiceThread.Abort();

             //distruggo l'oggetto

            ServiceThread = (System.Threading.Thread)

null;

}

VB.Net

 Protected Overrides Sub OnStop()
        
Dim bEsci 
As Boolean = false
        
        While 
(bEsci = false
)
            ServiceThread.
Join
            Select Case 
(StatoServizio)
                
Case 
Terminato
                    bEsci 
= true
                Case 
Pausa
                    bEsci 
= true
            End Select
            
        End While
        If 
ServiceThread.IsAlive 
Then
            
ServiceThread.Abort
        
End If
        
'distruggo l'oggetto
        
ServiceThread = CType
(Nothing,System.Threading.Thread)
    
End Sub

vb.net e c# ricavare il percorso di un servizio windows

Se vogliamo ottenere il percorso in cui gira il file (.exe) del nostro servizio, possiamo utilizzare la proprietà location dell'oggetto assembly. Di seguito si riporta un esempio

C#

string

sPercorso= this.GetType().Assembly.Location;

int iSlash = sPercorso.LastIndexOf(@"\");

sPercorso= sPercorso.Substring(0, iSlash +1);

 

VB.Net

Dim sPercorso As String = Me.GetType.Assembly.Location
Dim iSlash As Integer = sPercorso.LastIndexOf("\")
sPercorso 
sPercorso.Substring(0, (iSlash + 1))
Installare un servio windows creato con .NET

Per installare un servizio windows, creato con visual studio .net (c# o vb.net) oltre ad utilizzare il pacchetto di installazione, possiamo utilizzare l'utility, InstallUtil.exe.

Il funzionamento è semplice, (dopo aver agguinto al progetto il file projectInstaller (aggiungi programma di installazione)) apriamo il prompt dei comandi di visual studio, situato nella barra dei menu di windows, dove si trova visual studio net.

Una volta aperto, selezioniamo il percorso dove si trova il servizio (file exe) creato, a questo punto una volta posizionati nella cartella di tale servizio, digitiamo nella finestra del prompt di visual studio InstallUtili.exe NomeServizio.exe.

In questo modo verrà installato nei servizi e comparirà nella lista dei servizi.

Se invece lo si vuole disistallare, dovremmo utilizzare il parametro /U, esempio:

InstallUtil.exe /U nomeServizio.exe

Debug di un servio windows creato con .NET

Se abbiamo creato in vb.net o c# un servizio, utilizzando l'ambiente di sviluppo visual studio .Net, e volessimo testare tale servizio in debug, dobbiamo seguire la procedura descritta qui di seguito.

Prima cosa, mettere i punti di debug, seconda cosa, consiglio, di mettere delle pause (Thread.sleep(20000))prima della proceudra che si vuole eseguire, in modo che il codice non venga eseguito in tempi rapidi.

Fatto ciò, facciamo partire il nostro servizio, dopo averlo avviato, andiamo in visual studio .Net, dal menu debug, selezioniamo la voce "Processi..." verrà visualizza la finestra dei processi, selezionare il processo (servizio) che si vuole fare il debug. Se non dovesse essere visibile tale servizio, mettete la spunta sull'opzione "Mostra processi di sistema".

Sql server inserire in un campo il valore null

Per inserire in un campo di una tabella il valore null, bisogna tenere premuto il tasto CTRL e poi una volta il tasto 0 (zero).

 

Posted: feb 17 2006, 11:19 by emanuelem | with no comments
Filed under:
Sql server posizionarsi alla fine di una tabella o al primo record di una tabella
Tenendo premuto il tasto Alt Gr ed il tasto Fine, in una tabella di sql server 2000, ci si posizionerà alla fine dei record di tale tabella. Al contrario, se teniamo il pulsante Alt Gr ed il tasto home (freccia diagonale) ci si posizionerà al primo record della tabella.
Posted: feb 16 2006, 06:46 by emanuelem | with no comments
Filed under:
Navision e database

Da questo sito http://blogs.ugidotnet.org/AlexBlog/archive/2006/02/10/34649.aspx?Pending=true potete leggere un interessante articolo su come ottenere l'elenco dei db, su navision.

Che dirvi buona lettura :-)

Posted: feb 10 2006, 09:34 by emanuelem | with no comments
Filed under:
Eventi su visual studio 2005 e sql server 2005

Da questo sito http://www.microsoft.com/italy/launch2005/sqlroad/default.mspx potete vedere il calendario e registrarvi agli eventi gratuiti della Microsoft, su Visual studio 2005 e sql server 2005.

Che dirvi.. buona visione.

Access gestire l'assistente di office

DA questo sito http://blog.shareoffice.it/emanuele/archive/2006/02/02/3799.aspx è possibile leggere un trucco su come utilizzare e gestire l'assistente di office (fumetto).

Posted: feb 02 2006, 10:21 by emanuelem | with no comments
Filed under: