vb.netでのスレッド化に関する問題

ピータープ

背景:私は、多くのデータベースレコードを処理し、実行するタスクを生成するプログラムを持っています。(この場合、ADでユーザーアカウントを作成します)。これの一部は、プロファイルとホームディレクトリ用のユーザーディレクトリを作成し、それらにアクセス許可を設定することです。これは、広告アカウントがすべてのDCに複製されるまで待つ必要があります。

したがって、私のプログラムには、ディレクトリの作成を担当する別のスレッドがあり、メインスレッドから入力されたキューを処理します。

私はスレッド化についていくつかの調査を行い、次のコードパターンを考え出しました。

Imports System.Threading

Public Class Form1
Dim worker As Object
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    worker = New workerObj(AddressOf resultcallback)
    Dim t As New Thread(AddressOf worker.mainloop)
End Sub

Public Sub resultcallback(ByVal item As String)
    Outbox.AppendText(item)
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    worker.addItem(inbox.Text)
End Sub
End Class

Public Delegate Sub resultcallback(ByVal item As String)

Public Class workerObj
Private myQueue As New Queue(Of String)
Private myCallback As resultcallback
Dim item As String = "nout"

Public Sub New(ByVal callbackdelegate As resultcallback)
    myCallback = callbackdelegate
End Sub

Public Sub mainloop()
    While True
        If myQueue.Count > 0 Then
            item = myQueue.Dequeue()
            myCallBack(item)
        End If
        Thread.Sleep(5000)
    End While
End Sub

Public Sub addItem(ByVal item As String)
    myQueue.Enqueue(item)
End Sub
End Class

問題:行Dim t as new Thread....。

Error   1   Overload resolution failed because no accessible 'New' is most specific for these arguments:
'Public Sub New(start As System.Threading.ParameterizedThreadStart)': Not most specific.
'Public Sub New(start As System.Threading.ThreadStart)': Not most specific. n:\visual studio 2013\Projects\ThreadTest\ThreadTest\Form1.vb   7   13  ThreadTest

誰かが私がどこで間違っているのか教えてもらえますか?乾杯。

パナギオティスカナボス

スレッドにはパブリックコンストラクターがないため、Thread.Startを呼び出す必要があります。ただし、そうしないことをお勧めします。マルチスレッドプログラミングについて知っている場合、スレッドセーフなコードを書くのは十分に注意が必要です。

たとえば、コードでは、ロックせずに2つの異なるスレッドからキューを変更します。キューはスレッドセーフではないため、キューが破損する可能性があります。アクセスをロックするか、スレッドセーフなConcurrentQueueを使用する必要があります。別のエラーは、別のスレッドからTextBoxを変更しようとしています。これは、UIスレッドのみがUIコントロールの変更を許可されているため、例外につながります。

ただし、より良いオプションは、DataFlowライブラリのActionBlockクラスを使用することです。これは、要求をキューに入れ、1つ以上の個別のスレッドで処理します。

コードは次のように単純にすることができます。

Dim myFileWorker=New ActionBlock(Of string)(Function(path) =>DoSomething(path))

For Each somePath As String in ListWithManyPaths
    myFileWorker.Post(somePath)
Next somePath

myFileWorker.Complete()
myFileWorker.Completion.Wait()

デフォルトでは、一度に1つのパスのみが処理されます。複数のパスを処理するには、目的のMaxDegreeOfParallelismを指定してExecutionDataflowBlockOptionsオブジェクトを渡します

Dim options=New ExecutionDataflowBlockOptions() With { .MaxDegreeOfParallelism=5}
Dim myFileWorker=New ActionBlock(Of String) Function(path) DoSomething(path),options)    

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

VB.NetでのオブジェクトからXMLへのシリアル化に関する問題

分類Dev

vb.netを使用したレコードの削除とデータの読み取りに関する問題

分類Dev

VBのIfステートメントに関する問題

分類Dev

VB.NETでExtendedWebBrowserを初期化し、C#からVB.Netへの解析に問題があります

分類Dev

C#からVB.netへのコード変換。匿名のNew()に関する問題

分類Dev

Windows7の一部のvb6データグリッドに関する問題

分類Dev

VBでのチャートデータの設定に関する問題

分類Dev

VB.Net別のスレッドでタスクを実行する

分類Dev

vb.netの順序で開始する複数のスレッド

分類Dev

C ++をVB.Netの問題に変換する

分類Dev

vb.netを使用したSilverlightアプリケーション。ロータスノートでの新しいメールの作成に関する問題

分類Dev

誰かが私のVB.netコードをチェックできますか?以下に説明する問題

分類Dev

データのマージのパフォーマンスに関する質問-vb.netで設定

分類Dev

プログレスバーの問題VB.Net

分類Dev

(VB.net)Webスクレイピングの問題

分類Dev

複数のスレッドでのvb.netのping

分類Dev

VB.NETパスワードハッシュ関数に相当するPHP

分類Dev

VBの計算に問題がある

分類Dev

ラジオボタンのメッセージボックスvb.netに問題があります

分類Dev

VB6を介したExcelドキュメントの条件付きフォーマット(フォーマットの上書きに関する問題)

分類Dev

C#PageAsyncTask()を同等のVB.Netに変換する際の問題

分類Dev

関数をvbからc#に変換する際の問題

分類Dev

vb.netのデータベースに問題があります

分類Dev

戻り値のあるマルチスレッド:vb.net

分類Dev

BC30452:整数変数と整数配列での「=」演算子の使用に関する問題-VB Visual Basic

分類Dev

2つのクラスに対する一般的なメソッド/関数-VB.NET

分類Dev

XMLルートVB.netに名前空間を追加する際の問題

分類Dev

vb6で.net2.0dllを実行する際の問題

分類Dev

文字列配列の問題を分割するvb.net

Related 関連記事

  1. 1

    VB.NetでのオブジェクトからXMLへのシリアル化に関する問題

  2. 2

    vb.netを使用したレコードの削除とデータの読み取りに関する問題

  3. 3

    VBのIfステートメントに関する問題

  4. 4

    VB.NETでExtendedWebBrowserを初期化し、C#からVB.Netへの解析に問題があります

  5. 5

    C#からVB.netへのコード変換。匿名のNew()に関する問題

  6. 6

    Windows7の一部のvb6データグリッドに関する問題

  7. 7

    VBでのチャートデータの設定に関する問題

  8. 8

    VB.Net別のスレッドでタスクを実行する

  9. 9

    vb.netの順序で開始する複数のスレッド

  10. 10

    C ++をVB.Netの問題に変換する

  11. 11

    vb.netを使用したSilverlightアプリケーション。ロータスノートでの新しいメールの作成に関する問題

  12. 12

    誰かが私のVB.netコードをチェックできますか?以下に説明する問題

  13. 13

    データのマージのパフォーマンスに関する質問-vb.netで設定

  14. 14

    プログレスバーの問題VB.Net

  15. 15

    (VB.net)Webスクレイピングの問題

  16. 16

    複数のスレッドでのvb.netのping

  17. 17

    VB.NETパスワードハッシュ関数に相当するPHP

  18. 18

    VBの計算に問題がある

  19. 19

    ラジオボタンのメッセージボックスvb.netに問題があります

  20. 20

    VB6を介したExcelドキュメントの条件付きフォーマット(フォーマットの上書きに関する問題)

  21. 21

    C#PageAsyncTask()を同等のVB.Netに変換する際の問題

  22. 22

    関数をvbからc#に変換する際の問題

  23. 23

    vb.netのデータベースに問題があります

  24. 24

    戻り値のあるマルチスレッド:vb.net

  25. 25

    BC30452:整数変数と整数配列での「=」演算子の使用に関する問題-VB Visual Basic

  26. 26

    2つのクラスに対する一般的なメソッド/関数-VB.NET

  27. 27

    XMLルートVB.netに名前空間を追加する際の問題

  28. 28

    vb6で.net2.0dllを実行する際の問題

  29. 29

    文字列配列の問題を分割するvb.net

ホットタグ

アーカイブ