1

バックグラウンドワーカーがあり、2 つのことを行うことになっています。
1. GUIにユーザーコントロールを追加する 2.
ユーザーが sed usercontrol に入力した値を読み取り、それを関数に渡す これを
行う最善の方法は何ですか?

DoWork イベントに渡すことができる 2 つのイベント処理メソッドを持つことを考えていました。
最初はポイント番号 1 を処理し、2 番目はポイント番号 2 を処理します。
次に、次のようにします
。 1. worker.ProgressChanged イベント内 - ワーカーがユーザー コントロールをページに追加します
。ワーカーは必要な ui 値が入力されるのを待ちます
3. worker.RunWorkerCompleted イベント内 - ワーカーにタスク番号 2 を実行するように指示します。

これは正しいアプローチですか?
そうでない場合、これを行う最良の方法は何ですか?
これが正しいアプローチである場合、ワーカーが値を待つための最良の方法は何ですか? 内部にスリープがあるwhileループだけですか、それとももっと洗練された方法がありますか?
前もって感謝します。

編集1:これが違いを生む場合、私はWPF-XAMLを使用しています

4

2 に答える 2

1

あなたのbackgroundworkerスレッドがユーザー入力をループで待つのは良い考えではないと思います。UIはすでにこれを行っているので、それを使用する必要があります。

私の意見では、これを行う必要があります:

  1. DoWork(2.)で説明した関数を呼び出すイベントハンドラーをbackgroundworkersイベントに追加します。
  2. ユーザーが何かを入力したときに実行されるイベントハンドラーをコントロールに追加します。コントロールにが含まれている場合TextBoxは、イベントハンドラーをTextChangedイベントに追加する必要があります。
  3. 上記のイベントハンドラーで、worker.RunWorkerAsync(textBox.Text)

このように、処理関数(2.)は必要な場合にのみ呼び出され、2つのスレッドでユーザー入力を待つリソースを浪費することはありません。

于 2012-05-17T10:37:51.310 に答える
0

これは私が最終的にそれをした方法です:

while(string.IsNullOrEmpty(_emailData.CaptchaCurrent))
    Thread.Sleep(100);

ユーザー入力を格納する変数を作成し、その特定の変数が値を持つのをスレッドに待機させました。

これはすべてスレッドで行われます。

于 2012-05-29T05:27:32.047 に答える