0

私はスレッド化が非常に初心者で、単一のスレッドを作成して大きな関数を実行するだけです。プログラムの最後に向けて関数の最後に表示されるメッセージボックスを作成し、ロード時間を教えてくれました。アプリケーションをロードすると、メッセージボックスにかかった時間が表示され、スレッドが開始されます (コンポーネントがスレッドからロードされている間、UI はナビゲート可能ですが) 複数を処理できるようにするためのスレッドのポイントではありません同時に機能しますか?新しいスレッドが開始される前に、メイン スレッドが終了するまで待機しているのはなぜですか?

アプリの早い段階で新しいスレッドを宣言して開始します

4

2 に答える 2

2

アプリケーションの名前空間内のすべての Form に対して、Forms プロパティの下の My 名前空間に既定のインスタンスが作成されます。

---------------------- / メインスレッドの開始 / ----------------------- ------------

Private Sub FindCustomerLocation()
Dim Findcontractor_Thread As New Thread(AddressOf **FindContractor_ThreadExecute**)
Findcontractor_Thread.Priority = ThreadPriority.AboveNormal
Findcontractor_Thread.Start(**me**)
End Sub

------------------ / ランニングスレッド / ---------------

Private Sub **FindContractor_ThreadExecute**(beginform as *NameOfFormComingFrom*)
Dim threadControls(1) As Object
threadControls(0) = Me.XamDataGrid1
threadControls(1) = Me.WebBrowserMap

 **FindContractor_WorkingThread**(threadControls,beginform) ' ANY UI Calls back to the Main     UI Thread MUST be delegated and Invoked

End Sub

------------------ / スレッドから UI 呼び出しを設定する方法 / ----------------------

Delegate Sub **FindContractor_WorkingThread**(s As Integer,beginform as           *NameOfFormComingFrom*)
Sub **FindContractor_WorkingThreadInvoke**(ByVal s As Integer,beginform as     *NameOfFormComingFrom*)
If beginform.mouse.InvokeRequired Then
Dim d As New FindContractor_WorkingThread(AddressOf            FindContractor_WorkingThreadInvoke)
beginform.Invoke(d, New Object() {s,beginform})
Else
 beginform.Mouse.OverrideCursor = Cursors.Wait

    'Do something...

beginform.Mouse.OverrideCursor = Nothing
 End If
End Sub

Pakksの回答とテスト済みのソースからのソース!

于 2013-07-25T20:33:32.377 に答える