2011-07-08 11 views
0

私のフォームは、6秒ごとに何かをチェックするバックグラウンドワーカーを作成します。結果は1〜100で、これを表示したい。プログレスバーの値を別のスレッドから更新しますか?

しかし、私はそれをまっすぐにすると、クロススレッドエラーが発生するので、私はいくつかの研究代表者の後にそれを行う方法です。

Form1クラスの内部で作成されたアイブ:

public delegate void SetProgressbarValueDelegate(int val); 

が、どのように私は実際にプログレスバーを更新するには、「それを接続する」のか? WinFormsを使用して、あなたのアールを想定し

おかげ

答えて

4

は、BackgroundWorkerクラスが自動的にあなたのUIスレッド上に戻って整列化されますProgressChangedイベントを発生させます。このイベントのハンドラ内のユーザーインターフェイスを更新する必要があります。

の使用方法の簡単な例がMSDN documentationにあります。

+0

Okey、最初はうまくいきます。しかし、もし私が価値を持っているなら、99のままで、それをプログレスバーの新しい価値にしたいのですが、どうすればそれを送ることができますか?私がやっている(BackgroundWorkerとしての送信者).ReportProgress(99); worker_DoWorkの中にありますが、実際にはデータを送信したいだけではなく、他のコントロールとの使用のために – Jason94

+1

申し訳ありませんが、私は意図的にupvoteすることを意図していました。質問が編集されるまでは変更できません。ごめんごめん!しかし編集して、私は私の愚かな行為を元に戻します。 – faester

+0

@faester - ちょうど編集しました。ありがとう:-) – ColinE

関連する問題