1

いくつかの Web サイトからデータを取得するループがあり、そのループがデータを取得してデータベースに入力するのに約 1 時間かかります。このループはスレッド内にあり、スレッドを一時停止するボタンを追加したいと考えています。ボタンをもう一度クリックすると、停止したところから再開します。どうすれば安全な方法でこれを行うことができますか?

4

2 に答える 2

1

これは単純な Windows コンソール アプリケーションです。ブール フラグを使用して、スレッドが処理する必要があるかどうかを示します。これがあなたを正しい方向に向けてくれることを願っています。

Module Module1

    Private _ThreadControl_Run As Boolean = False

    Sub Main()
        Dim thread As New System.Threading.Thread(AddressOf ThreadWorker)
        thread.IsBackground = True
        thread.Start()

        _ThreadControl_Run = True
        Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
        System.Threading.Thread.Sleep(1000)

        _ThreadControl_Run = False
        Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
        System.Threading.Thread.Sleep(1000)

        _ThreadControl_Run = True
        Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
        System.Threading.Thread.Sleep(1000)

        _ThreadControl_Run = False
        Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
        System.Threading.Thread.Sleep(1000)
    End Sub

    Private Sub ThreadWorker()
        Do While True
            If (_ThreadControl_Run) Then
                Console.WriteLine("     ThreadWorker()")
                System.Threading.Thread.Sleep(100)
            End If
        Loop
    End Sub

End Module
于 2012-07-16T20:59:56.120 に答える
0

これを試して:

Public Sub PauseThreadButton_Click(sender As System.Object, e As System.EventArgs) Handles PauseThreadButton.Click
    'REM: Next line puts your thread in a suspended state
    TheThread.Suspend()
End Sub

再開します:

Public Sub ResumeThreadButton_Click(sender As System.Object, e As System.EventArgs) Handles ResumeThreadButton.Click
    'REM: Next line resumes your thread
    TheThread.Resume()
End Sub
于 2012-07-16T15:14:54.270 に答える