2011-02-25 4 views
2

ユーザーに実行するために利用可能なレポートのリストを持つレポートシステムがあります。私ができるようにしたいのは、定期的にアプリケーションがSQLサーバー上の新しいレポートを探し、利用可能なレポートのリストを再作成するようにすることです。C#アプリケーションが実行されているときに新しいアプリケーション項目を確認します。

しかし、私はアプリケーションをロックしないでこれをやりたい、私はこれをシームレスにしたいと思います。

この方法を可能な限り効率的に行うにはどうすればよいですか?

ありがとうございました

答えて

2

あなたの質問が分かっていれば、ユーザーに影響を与えずにバックグラウンドスレッドでこの作業を行い、完了したらGUIを更新したいと考えています。

BackgroundWorkerヘルパークラスを調べます。

+0

BackgroundWorkerクラス内では、クラスフォーム内のメインフォームを参照し、メインフォーム上で公開されるコントロールを正しく作成する必要があります。 – mattgcon

+0

これを処理する方法はたくさんありますが、パブリックコントロール/変数は最も簡単です。しかし、間違ったスレッドから制御を変更することはできないため、Invokeについて学ぶことになります。 –

2

私はポーリングを行うためにバックグラウンドスレッドを使用することをお勧めします。新しいスレッドオブジェクトを開始し、サーバーをポーリングし、各チェックの後にスリープすることができます。変更が見つかった場合は、データを取得できます。別のスレッドでは実行できないため、Invokeを呼び出してGUIを更新する必要があります。

代わりに、タイマーを使用してTickイベントの中でチェックを行いますが、チェックに時間がかかります(サーバーがビジー状態であるか、テーブルロックがある場合は時間がかかることがあります)それはあなたのアプリケーションをブロックするので、私はこのアプローチに反対することをお勧めします。

関連する問題