2012-03-22 11 views
0

修正するのが好きなことにもかかわらず、何らかの方法でエラーよりも好奇心の問題があります。機能が残る前に画面が完全に更新されていない

私はC#Winformのパネルにビットマップを持つボタンで表される約100個のデバイスのグラフィック表現を持っています。

起動時に、ソフトウェアはRS485バスをスキャンし、これらのデバイスを画面に作成します。

残念ながら、私が気づいたのは、スキャン機能の終わりに近づくにつれて、デバイスはすばやく表示されなくなり、つづりがあるように見え、すべてが表示されることです。

これは、スキャン機能が終了し、呼び出し元に戻ってきた別の機能に移りました。これは、CPU時間を費やしてUIスレッドからリソースを取り除いています。

スクリーンが完全に更新される前に、どのようにソフトウェアがスキャン機能から復帰するのを防ぐことができるのか誰にも疑問があります。

どのような思考やヒントが非常に受け取りました。

ありがとう、

デビッド

答えて

1

あなたのスキャン中にあなたがボタンを作成するようにあなたがそれらを見つけるように聞こえます。代わりに、スキャンを行い、データを保存して、スキャンが完全に終了したら、、次に描画ボタンを開始します。

理想的には、BackgroundWorkerスレッドであなたのスキャンを行うと、あなたはList<IRS485Device>は、すべての中にあなたのパネルに進行状況インジケータを更新するためにProgressChanged eventsをオフ発射のようなリストのいくつかのタイプで見つけるRS485機器を格納します。 RunWorkerCompletedに到達したら、進行状況インジケータをパネルから削除し、スキャンで発見したすべてのデータからボタンを描画するルーチンを呼び出します。

+0

こんにちはブラッド、あなたの答えをありがとう - 残念なことに私はすでにあなたが示唆したもののほとんどをしています - デバイスを描画するコードのビットへの実際の入力は、バックグラウンドワーカーから生成されたリストですパネル上の進捗インジケーターを使って見ることができるかもしれません - 見つけられたときにデバイスが画面上にポップアップ表示されて本当にクールに見えます! – davidpcl1977

関連する問題