0

リモート コンピューターから情報を照会するプログラムに取り組んでいます。WMI、レジストリなど。私はそれらのほとんどをすべて完成させましたが、スレッド化しないとかなり遅くなります。(次のリクエストに移る前に、リクエストごとにリモートマシンからの応答を待っていると思います)。

スレッド化のさまざまな方法について読みました。Thread クラス、BackgroundWorker クラス、Task クラス。すべてのクエリを問題なくスレッド化できますが、すべての情報をメイン スレッドに戻して、メイン XAML ウィンドウの RichTextBox に情報をフォーマットして表示できるようにします。変数が他のスレッドなどで使用されているため、変数にアクセスできないというエラーが発生し続けます。

他のスレッドによって計算/取得された変数を管理/返す方法について、誰かが私に洞察を与えることができますか? 私は数多くのビデオを見て、スレッド化に関するいくつかの記事を読みましたが、スレッド化が実際にどのように機能するか、および別のスレッドから変数にアクセスできる場合とアクセスできない場合をどのように知る必要があるかを実際に説明しているものを見つけることができませんなど

4

2 に答える 2

0

これは標準的な Windows UI の問題 (WinForms、XAML) です。データは UI スレッドとは別のスレッドから来ています。問題のWinFormsを回避する方法については、この MSDN の記事で、WPF XAML のこの記事で読むことができます。.NET 4.x の (それほど新しいものではありませんが) Task Parallel Library は、非常に優れた簡単な同期コンテキストを提供します。ここで使用方法を読むことができます: Task Synchronization Context

新しいasync/awaitの概念もありますが、まだ使っていないのでなんとも言えません。

スレッド化と Task(ing) はバックグラウンドでは 2 つの異なるものですが、単純な非同期操作には IMHO Tasks で十分です。主に流暢な API と同期コンテキストのサポートにより、このライブラリは非常に使いやすいと思います。Task Parallel Libraryの詳細については、こちらを参照してください。

于 2013-05-25T21:14:31.070 に答える