1

TaskFactory (Framework 4) を使用して LongRunning パラメーターを使用して非同期タスクを実行しようとしています。ロード パネルを表示しますが、UI がハングし、ダイナミック gif が正しくレンダリングされません。

パネルを表示した後にこのタスクを起動すると、別のスレッドで実行されるため、UI は読み込み中の画像を自由に表示できると思いましたが、動かなくなりました。

タスクの起動後にこれ以上のコードはありません。他のすべては、コールバック関数で制御されます。

この読み込み中の画像をハングアップせずに表示するにはどうすればよいですか?

'HERE I MAKE VISIBLE MY LOADING PANEL
panelCargando.Visible = True

'I START A LONG RUNNING TASK with callback
Dim context As TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext

        Task(Of ContratoType). _
            Factory.StartNew(Function()

                                 Dim contrato As ResultadoTarificacionType = Me.Tarificador.TarificarContrato(datosContrato, Nothing, 25000)

                                 Dim estadoContacto As EstadoProductoContratoType() = Tarificador.ObtenerEstadosTarificacion(contrato.IdContrato)

                                 'Dim estadoProductoTarif As EstadoProductoContratoType() = Tarificador.ObtenerEstadosTarificacionProductos(contrato.IdContrato )
                                 Return Tarificador.ObtenerContrato(contrato.IdContrato)

                             End Function, CancellationToken.None, TaskCreationOptions.LongRunning, context) _
        .ContinueWith(Sub(r)
                          TaskCallBack(r)
                      End Sub, context)
4

1 に答える 1

2

を明示的に使用していTaskScheduler.FromCurrentSynchronizationContextます。これは、実行時間の長いタスクが UI スレッドで実行されることを意味します。

あなたが本当に望んでいるのは、実行時間の長いタスクにデフォルトのタスクスケジューラを使用することですが、呼び出しに渡しTaskScheduler.FromCurrentSynchronizationContextContinueWith、コールバックだけが UI スレッドで実行されるようにすることです。

于 2013-06-11T10:54:13.363 に答える