BackgroundWorker

mercoledì 11 giugno 2008 - 11.25

maxmax03 Profilo | Newbie

Per problemi di cross-thread ho utilizzato il backgroundworker, è funziona ma perchè viene richiamato due volte???? qualcuno può darmi la soluzione allego il codice

Private Delegate Sub ViewInfoDocuments()

Private Sub frmConsole_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler BackgroundDocuments.DoWork, AddressOf BackgroundDocuments_DoWork
BackgroundDocuments.RunWorkerAsync()
end Sub

------------------------ Questa sub viene richiamata due volte ????

Private Sub BackgroundDocuments_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundDocuments.DoWork
If (Me.lstViewData.InvokeRequired) Then
Dim d As New ViewInfoDocuments(AddressOf StartThreadMonitor)
'Me.lstViewData.Invoke(d)
End If
End Sub

aiedail92 Profilo | Expert

Ciao

Il problema è questo: hai dato al BackgroundWorker il compito di gestire due metodi per l'evento DoWork; uno qui:

AddHandler BackgroundDocuments.DoWork, AddressOf BackgroundDocuments_DoWork

e l'altro qui:

... Handles BackgroundDocuments.DoWork

Per risolvere ti basta togliere uno dei due, meglio il primo

Luca

maxmax03 Profilo | Newbie

ti ringrazio un problema è risolto. Ora però se io passo come parametro ad un metodo un controllo ho lo stesso problema devo implementare nella dll il backgroundwork ?????

aiedail92 Profilo | Expert

Non ho capito cosa intendi, potresti spiegarti meglio, magari con un esempio?

Luca

maxmax03 Profilo | Newbie

Ho creato una dll con il VS2003 che consente di polare tutti gli oggetti visivi (listview, treeview ecc..) in base a delle quary.

- Windows -
dim obj as class = new class()
obj.View = me.listview
obj.ListNewDocuments

-Class

Public Property ViewObj() As ListView
Get
Return mvarView
End Get
Set(ByVal Value As ListView)
mvarView = Value
End Set
End Property

Public Sub ListNewDocuments()
While mvarLoop = True
PCSObjD.DataElaborazione = gvarData
PCSObjD.ListNewDoc(mvarView)
Thread.Sleep(30000)
End While
End Sub



la dll poi esegue il caricamento in base ad una query


public void ListNewDoc(ListView mvarListV)
{
ExecQry.Application ObjExeQry = new ExecQry.Application();


ObjExeQry.ConnectionString = ObjCfgSys.GetConnetion().ToString() ;
ObjExeQry.TypeConnection = (ConnectionType)Int32.Parse(ObjCfgSys.GetConnectionType().ToString());
ObjExeQry.StrSQL_Command =
" SELECT * FROM Protocollo " +
" WHERE protocollo.Data_protocollo = " +"'" + Datenow.ToString("dd/MM/yyyy") +"'" +
" AND protocollo.Utente = " + "'" + mvarUser + "'" +
" AND protocollo.Cod_Stato_documento = 1 ";
ObjExeQry.ListViewView = mvarListV;

ObjExeQry.Type_View = ExecQry.Application.Enum_Type_View.ListView;
ObjExeQry.QryFile = null;
ObjExeQry.ViewQuary();
}

ExecQuery è un'altra dll a cui viene passata la listview per essere popolata con file XML
ExecQuery è un generatore ed interprete di quey

aiedail92 Profilo | Expert

Ciao

Scusa, ma mi sono perso... cosa c'è che non va nel codice?

Luca

maxmax03 Profilo | Newbie

nel codice nulla ma come puoi vedere il passaggio dell'elemento visuale genera sempre errore di croos-thread e non so come risolverlo
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