VB.netがバックグラウンドワーカーを停止

マーク・インテス

バックグラウンドワーカーを停止し、作業中のすべてのプロセスを終了できるボタンを作成したいと思います。

これが私のサンプルのbackgroundworkerコードです:

       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            Try
                If BackgroundWorker1.IsBusy <> True Then
                    BackgroundWorker1.RunWorkerAsync()
                End If
            Catch ex As Exception
            End Try

        End Sub

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

            Dim counter As Integer = 1

            Do

            'updated code with stop function----------------
            BackgroundWorker1.WorkerSupportsCancellation = True
            If BackgroundWorker1.CancellationPending Then
                e.Cancel = True
                ProgressBar1.Value = 0
                Exit Do
            End If
            'updated code with stop function----------------

            ListBox1.Items.Add(counter)

            ProgressBar1.Value = ((counter - 1) / limit) * 100
            counter = counter + 1
            Loop While(counter <= 999999999999999999)

        End Sub

        Private Sub BackgroundWorker1_ProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            Try
            Catch ex As Exception
            End Try
        End Sub

        Private Sub BackgroundWorker1_Completed(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            Try
            Catch ex As Exception
            End Try
        End Sub

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False    
        End Sub

        'updated code with stop function----------------
        Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
              If BackgroundWorker1.IsBusy Then

                  If BackgroundWorker1.WorkerSupportsCancellation Then                
                     BackgroundWorker1.CancelAsync()
                  End If
              End If
        End Sub
        'updated code with stop function----------------

バックグラウンドワーカーを停止したときに、ループをリセットしてプログレスバーを0%に戻したい。

これは可能ですか?


上記のコードが更新され、正常に機能しています。

私はこのコードをdoループ内に追加しました:

        BackgroundWorker1.WorkerSupportsCancellation = True
        If BackgroundWorker1.CancellationPending Then
            e.Cancel = True
            ProgressBar1.Value = 0
            Exit Do
        End If

ワーカーを停止するボタンを作成しました。

    Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
          If BackgroundWorker1.IsBusy Then

              If BackgroundWorker1.WorkerSupportsCancellation Then                
                 BackgroundWorker1.CancelAsync()
              End If
          End If
    End Sub
Heslacher

BackgroundworkerクラスにはCancelAsync()、bgwの実行をキャンセルするために呼び出す必要のあるメソッドがあります。

You need to set the Backgroundworker.WorkerSupportsCancellation property to true and inside the while loop you need to check the CancellationPending property wether the value is true which indicates a call to the CancelAsync() method.

If CancellationPending evaluates to true, you would ( which you should have done already ) call one of the overloaded ReportProgress() (Docu) methods to set your ProgressBar value to the desired value.

EDIT: You should set the Cancel property of the DoWorkEventArgs to true so you can check the Cancelled property of the RunWorkerCompletedEventArgs inside the RunworkerCompletedevent.

You also shouldn not access any controls which lives in the UI thread. You better use the ProgressChanged(Docu) event.

See: BackgroundWorker Docu

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Vb.NetバックグラウンドワーカーのUIの更新が機能しない

分類Dev

VB.NET:バックグラウンドワーカーへの複数の引数の送信

分類Dev

mysqlリーダーを備えたvb.netバックグラウンドワーカーと複数のテキストボックス

分類Dev

別のクラスVB.Netのメソッドを使用して、バックグラウンドワーカーを介してメインフォームのコントロールを更新します

分類Dev

VB2013リストボックスで選択したアイテムをバックグラウンドワーカーに渡す

分類Dev

バックグラウンドプロセスがアプリケーションvb.netをハングさせる

分類Dev

vb.netでスリープ中にバックグラウンドで.Gif画像を実行する方法

分類Dev

バックグラウンドスレッドvb.netからランタイムWebブラウザコントロールを操作する

分類Dev

VB6 IDE内でステップイン、オーバー、アウトをデバッグすると、クラスウィンドウが閉じます。

分類Dev

キーワードカウントVB.netを削除します

分類Dev

バックグラウンドコードの遅い行。バイパス/交換/スピードアップする方法。VB.NET

分類Dev

ユーザーがvb6.0プロジェクトソフトウェアからログアウトしたときにネットワークドライバーのマップを解除するにはどうすればよいですか?

分類Dev

バックグラウンドワーカーを停止します

分類Dev

vb.netのBindingList(Of T)を使用したWinformsクロススレッドデータバインディング

分類Dev

VB.NETデータが親ウィンドウのポストバックのモーダルポップアップからクリアされます

分類Dev

同じネットワーク内のグローバルIPを決定するvb.net、C#

分類Dev

vb.netウィンドウはpostgresqlサーバーを使用して選択クエリを形成します

分類Dev

VB.NETのニューラルネットワーク

分類Dev

vb.netネットワークプログラミング-ネットワークインターフェイスの一覧表示

分類Dev

vb.netのスワップラベルの位置をドラッグアンドドロップします

分類Dev

VB.netからプログラムでExcelワークブックに名前を付ける

分類Dev

VB.NETのコードでチェックボックスコントロールを正しくチェックする方法は?(VS2017デバッガーが私のコードでクラッシュします)

分類Dev

バックグラウンドワーカーがWPFを機能しない

分類Dev

ASP.NET(VB)グローバルアプリケーションクラスが見つかりません

分類Dev

Vb.netで重複することなく、データグリッドビューのすべての行をカウントします

分類Dev

カスケード クラス プロパティ vb.net

分類Dev

複数のキーアップ/キーダウンイベントを検出し、各C#/ VB.Netでのコードの起動を停止します

分類Dev

MS Access、ネットワーク経由でVBコードを使用してバックエンドテーブルをリンクする

分類Dev

DoWork C#内でバックグラウンドワーカーを停止します

Related 関連記事

  1. 1

    Vb.NetバックグラウンドワーカーのUIの更新が機能しない

  2. 2

    VB.NET:バックグラウンドワーカーへの複数の引数の送信

  3. 3

    mysqlリーダーを備えたvb.netバックグラウンドワーカーと複数のテキストボックス

  4. 4

    別のクラスVB.Netのメソッドを使用して、バックグラウンドワーカーを介してメインフォームのコントロールを更新します

  5. 5

    VB2013リストボックスで選択したアイテムをバックグラウンドワーカーに渡す

  6. 6

    バックグラウンドプロセスがアプリケーションvb.netをハングさせる

  7. 7

    vb.netでスリープ中にバックグラウンドで.Gif画像を実行する方法

  8. 8

    バックグラウンドスレッドvb.netからランタイムWebブラウザコントロールを操作する

  9. 9

    VB6 IDE内でステップイン、オーバー、アウトをデバッグすると、クラスウィンドウが閉じます。

  10. 10

    キーワードカウントVB.netを削除します

  11. 11

    バックグラウンドコードの遅い行。バイパス/交換/スピードアップする方法。VB.NET

  12. 12

    ユーザーがvb6.0プロジェクトソフトウェアからログアウトしたときにネットワークドライバーのマップを解除するにはどうすればよいですか?

  13. 13

    バックグラウンドワーカーを停止します

  14. 14

    vb.netのBindingList(Of T)を使用したWinformsクロススレッドデータバインディング

  15. 15

    VB.NETデータが親ウィンドウのポストバックのモーダルポップアップからクリアされます

  16. 16

    同じネットワーク内のグローバルIPを決定するvb.net、C#

  17. 17

    vb.netウィンドウはpostgresqlサーバーを使用して選択クエリを形成します

  18. 18

    VB.NETのニューラルネットワーク

  19. 19

    vb.netネットワークプログラミング-ネットワークインターフェイスの一覧表示

  20. 20

    vb.netのスワップラベルの位置をドラッグアンドドロップします

  21. 21

    VB.netからプログラムでExcelワークブックに名前を付ける

  22. 22

    VB.NETのコードでチェックボックスコントロールを正しくチェックする方法は?(VS2017デバッガーが私のコードでクラッシュします)

  23. 23

    バックグラウンドワーカーがWPFを機能しない

  24. 24

    ASP.NET(VB)グローバルアプリケーションクラスが見つかりません

  25. 25

    Vb.netで重複することなく、データグリッドビューのすべての行をカウントします

  26. 26

    カスケード クラス プロパティ vb.net

  27. 27

    複数のキーアップ/キーダウンイベントを検出し、各C#/ VB.Netでのコードの起動を停止します

  28. 28

    MS Access、ネットワーク経由でVBコードを使用してバックエンドテーブルをリンクする

  29. 29

    DoWork C#内でバックグラウンドワーカーを停止します

ホットタグ

アーカイブ