Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Problemi con i thread tra vb e c#
martedì 03 giugno 2008 - 16.48
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
maxmax03
Profilo
| Newbie
25
messaggi | Data Invio:
mar 3 giu 2008 - 16:48
Salve, ho realizzato un client in Vb e un serverino in c#. Ma quando istanzio la classe c# che contiene gli eventi da VB mi crea dei problemi. in quanto questa dovrebbe iterare sullo stato dei servizi. Chiaramente il metodo viene lanciato da un thread ma invece di rilasciare le risorse rimane freezato la finestra principale . Proteste darmi dei suggerimenti grazie.
Parte VB
- dichiarazione
Private WithEvents PCSObjS As PCSService = New PCSService
- codice inserito nella form.load
thSB = New Thread(New ThreadStart(AddressOf PCSObjS.StartCheckService))
thSB.Start()
- Esegue attivita all'evento
Private Sub objs_AnEvents(ByVal source As Object, ByVal Stato As Integer) Handles PCSObjS.Changed
PCSObjS.ViewStatus()
Me.StatusBar1.Panels(1).Text = System.DateTime.Now.ToString("dd/MM/yyyy")
Me.StatusBar1.Panels(2).Text = "Service Status: " + PCSObjS.DescStatus
Me.Refresh()
End Sub
- Parte C#
public event ChangeEventHandler Changed;
public void StartCheckService()
{
if (THService != null)
{
if (THService.IsAlive == false)
{
CreateThread();
}
else{mvarThreadService = false;}
}
else{CreateThread();}
}
/// <summary>
// crea il thread
/// <summary>
protected void CreateThread()
{
mvarThreadService = true;
THService = new Thread(new ThreadStart(ServiceStatus));
THService.Start();
}
/// Evento
public void ChangedStatus(int Stato)
{
if (Changed != null)
Changed(this,mvarStatus);
}
public void ServiceStatus()
{
/* Shut off the timer so it doesn't raise events while were
in this code
Me.tmrCheckStatus.Enabled = False */
//Thread.Sleep(7200);
while (mvarThreadService==true)
{
Type MyStatoString = typeof(EnumStatoServizio);
if (myService != null)
{
switch (myService.Status)
{
case ServiceControllerStatus.Stopped:
if (mvarStatus !=(Convert.ToInt16(ServiceControllerStatus.Stopped)))
{
mvarStrStatus = Enum.GetName(MyStatoString,EnumStatoServizio.Fermo) ;
mvarStatus = Convert.ToInt16(EnumStatoServizio.Fermo );
ChangedStatus(Convert.ToInt16(EnumStatoServizio.Fermo));
}
break;
case ServiceControllerStatus.Running:
if (mvarStatus != (Convert.ToInt16(ServiceControllerStatus.Running)))
{
mvarStrStatus = Enum.GetName(MyStatoString,EnumStatoServizio.Avviato ) ;
mvarStatus = Convert.ToInt16(EnumStatoServizio.Avviato);
ChangedStatus(Convert.ToInt16(EnumStatoServizio.Avviato ));
}
break;
case ServiceControllerStatus.Paused:
if (mvarStatus != (Convert.ToInt16(ServiceControllerStatus.Paused)))
{
mvarStrStatus = Enum.GetName(MyStatoString,EnumStatoServizio.Pausa ) ;
mvarStatus = Convert.ToInt16(EnumStatoServizio.Pausa );
ChangedStatus(Convert.ToInt16(EnumStatoServizio.Pausa ));
}
break;
default:
mvarStrStatus= Enum.GetName(MyStatoString,EnumStatoServizio.Abort) ;
mvarStatus = Convert.ToInt16(EnumStatoServizio.Abort );
ChangedStatus(Convert.ToInt16(ServiceControllerStatus.Paused));
mvarThreadService = false;
break;
}
}
else{mvarThreadService = false;}
}
}
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !