0

コードに BackgroundWorker または Threading を使用するにはどうすればよいですか。TreeView (Winforms) を更新し、WCF サービスを呼び出します。

任意の提案をお願いします。敬具。

前もって感謝します

AdministradorUILogging.TrazarDebug("PanelArbolFicheros. tslGuardarArbol_Click")
Dim listaFichero As New List(Of Fichero)

Windows.Forms.Cursor.Current = Cursors.WaitCursor

Me.TreeViewGB1.SuspendUpdate()

For Each nodo As NodoArbol In TreeViewGB1.Nodes

ProcesarNodo(nodo, listaFichero)

Next

Me.TreeViewGB1.ResumeUpdate()

' Cambiamos el cursor , tener en cuena si hacerlo asincrono '

Try

Using bfll As New ComunBfll()

bfll.AltaManualListaFicheros(listaFichero)

Mensajes.InformacionGuardada()

End Using

Catch ex As WCF.ServicioBase.Contrato.Excepciones.NoExisteOperacionException

Mensajes.AdvertenciaErrores("No existe la operación")

Catch ex As WCF.ServicioBase.Contrato.Excepciones.NoExisteExpedienteException

Mensajes.AdvertenciaErrores("No existe el expediente")

Catch ex As WCF.ServicioBase.Contrato.Excepciones.ConsistenciaException

Mensajes.AdvertenciaErrores("Inconsistencia detectada al superar el máximo permitido de ficheros para un tipo documental")

Catch ex As Exception

AdministradorUILogging.TrazarError(Me.[GetType]().FullName & " -> " & System.Reflection.MethodBase.GetCurrentMethod().Name & "." & ex.Message)

ExcepcionesIUUtil.ProcesarExcepcionPresentacion(ex, Me.Container)

End Try

InicializarArbol()

Windows.Forms.Cursor.Current = Cursors.Arrow
4

2 に答える 2

2

BackgroundWorker または1 つのスレッドを使用しても、アプリケーションが高速になるわけではありませんが、アプリケーションが応答しなくなるのを防ぐだけです。

必要なスレッドが 1 つだけの場合は、BackgroundWorker を使用するだけです。それが目的です。

この正確なケースでは、listaFichero変数を小さなリストに分割して並列処理でき、クライアントとサーバー間の帯域幅がボトルネックにならず、サーバー並列処理をサポートしている場合は、複数のスレッドを作成できます。

于 2009-02-24T13:44:23.490 に答える
0

正直なところ、きちんとやれば問題ありません。

バックグラウンドワーカーを使用すると適切に行う方が簡単なので、それを使用することをお勧めします。

于 2009-02-24T13:38:11.320 に答える