私は週末に読んで、マルチネットを.netで研究してきましたが、私が理解できない1つの質問があります。multithreading scope
私はボタンがあり、このボタンをクリックするとAmazon S3にファイルをアップロードしたいと思いますが、このアップロードタスクは数秒かかると思います。これはスレッドが入ってくる場所です。
それで、ユーザーがボタンをもう一度クリックすると、最初のスレッドが完全に終了しない限り、別のスレッドを開始してファイルをアップロードしたくない場合は、試してみてください冗長性を避けるためです。
どこでも私はマルチスレッドでは必要なときにスレッドを宣言していると説明しましたが、ボタンでクリックすれば必ず2回目のスレッドの名前と競合が発生しますすでに同じ名前のスレッドが存在します。
私の解決策は、クラスの先頭にスレッドを宣言することでした。ファイルをアップロードするコードでサブを作成します。ボタンがクリックされたときにスレッドが実行前に生きているかどうかを確認してください。 しかし、私はそれが終わったらスレッドを最初からやり直すことができないことを知りました。
だから私はかなり理解できませんが、別のスレッドで複数回実行する必要があるタスクを管理する方法です。毎回新しいスレッドを作成することを期待していますか?これは、固有の名前を持つ新しいスレッドを作成する必要があることを意味しますか?一度完了したらスレッドにはどうなりますか?私はスレッドを中止することは非常に悪いことを読んだが、私は何もしていない、それを削除することができない永遠にそこに残すことを期待していますか?これは、アプリケーションが長時間実行されていて、何も実行していない何千もの「死んだ」スレッドがある可能性があるということですか?
ここでは、人々のためのものを簡単にする場合に行うことのマークアップ版です。
Public Class Form1
Shared UploadThread As Thread = New Thread(AddressOf UploadLoop)
Shared Sub UploadLoop()
'code to upload a file to amazon S3
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If (UploadThread.IsAlive) Then
MsgBox("upload not completed")
Else
UploadThread.Start()
End If
End Sub
End Class
ボタンのEnabledプロパティを* False *に設定するだけです。転送が完了したら再度有効にすると、BackgroundWorkerが提供するRunWorkerCompletedイベントが優先されます。簡単なピーシー。 –