0

私は VB コーダーではありませんが、いくつかのパラメーターをフォームに設定して「実行」を押すことができる小さな VB.net ユーティリティ プロジェクトをいじっています。これにより、数分間実行できる多くのロジックが実行されます。 .

これはすべて、フォームをブロックする go-button-handler で発生します。vb.net では、フォームを更新できる別のスレッドでこのすべてのロジックを実行するのは簡単ですか。つまり、どのファイルが処理されているかを示すラベルを更新しますか? 複雑な場合は、私のユースケースで行う価値はありません!

イベントコードをコピーして thread.Run などに貼り付けたり、コードの周りにスレッドクラスを動的に作成したりすることはできますか?

4

2 に答える 2

0

このような目的で、BackgroundWorker クラス (System.ComponentModel.BackgroundWorker) を何度も使用しました。使い方は非常に簡単です (.NET で利用可能な他のマルチスレッド技術と比較して)。たとえば、ツール ボックスからフォームにドラッグするだけです。「WorkerReportsProgress」および「WorkerSupportsCancellation」プロパティを「True」に設定すると、たとえば進行状況バーの形式で UI にフィードバックを提供したり、ユーザーがキャンセル ボタンをクリックできるようにしたりすることもできます。

とにかく、ここに合理的に含めることができるよりも多くの情報があるので、このページを見ることから始めます。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

于 2013-10-10T15:22:15.207 に答える
0

BackgroundWorker は、開始するのに適した選択肢です。何を使用する場合でも、バックグラウンド スレッドがプロセッサを集中的に使用する場合、つまり長時間実行されるタイト ループの場合、パフォーマンスが影響を受ける可能性があることに注意してください。マルチコア CPU を使用している場合、これはあまり明白ではないかもしれません。

Threading.Thread の簡単な例を次に示します。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Button3.Enabled = False
    'for example pass a string and an integer to a thread as an array
    Dim params() As Object = {"one", 1} 'parameters for thread. object picked because of mixed type
    Dim t As New Threading.Thread(AddressOf someThread)
    t.IsBackground = True
    t.Start(params) 'start thread with params
End Sub

Public Sub someThread(params As Object)
    'not on the UI
    Dim theparams() As Object = DirectCast(params, Object()) 'convert object to what it really is, an array of objects
    Dim param1 As String = DirectCast(theparams(0), String)
    Dim param2 As Integer = DirectCast(theparams(1), Integer)
    Debug.WriteLine(param1)
    Debug.WriteLine(param2)

    showOnUI(param1)
End Sub

Public Sub showOnUI(s As String)
    If Me.InvokeRequired Then
        'not running on UI
        Me.Invoke(Sub() showOnUI(s)) 'run method on UI
    Else
        'running on UI
        Label1.Text = s
        Button3.Enabled = True
    End If
End Sub
于 2013-10-10T15:47:09.587 に答える