0

フォームを呼び出し、gif アニメーションを保持するバックグラウンド ワーカーがいます。目的は、プロセスの進行中にアニメーションを表示することですが、プロセスが完了すると閉じる必要があります。しかし、プロセスが完了しても閉じません。助けてください。
ありがとう

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    frmAnimation.ShowDialog()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    BackgroundWorker1.RunWorkerAsync()
    Dim sqldatasourceenumerator1 As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance
    datatable1 = sqldatasourceenumerator1.GetDataSources()
    DataGridView1.DataSource = datatable1

    'I have tried CancelAsync, but did not work

    BackgroundWorker1.CancelAsync()
    frmAnimation.Dispose()
End Sub
4

1 に答える 1

1

BackgroundWorkers は、バックグラウンド操作の「作業」を実際に行うことを目的としているため、メインの UI スレッドは引き続き画面にレンダリングできます。GetDataSources()BackgroundWorker スレッド内で関数呼び出しを実行する必要があると思われます。

ボタン クリック関数の内容と BackgroundWorker の DoWork 関数の内容を切り替えてみてください。具体的には、次のようなことを意味します。

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Dim sqldatasourceenumerator1 As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance
            datatable1 = sqldatasourceenumerator1.GetDataSources()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            BackgroundWorker1.RunWorkerAsync()
            frmAnimation.ShowDialog()
    End Sub

さらに、RunWorkerCompleted イベントにコードを追加して、バックグラウンド操作の完了時に行うべきことを処理します。

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            DataGridView1.DataSource = datatable1
            frmAnimation.Close()
    End Sub

プロシージャをモーダルまたはモードレスにするかどうかに依存するfrmAnimation.Show()代わりに、使用を検討することもできます。frmAnimation.ShowDialog()詳細については、こちらをご覧ください。

于 2013-02-03T22:26:20.717 に答える