Problemi con i thread tra vb e c#

martedì 03 giugno 2008 - 16.48

maxmax03 Profilo | Newbie

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;}
}
}


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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5