2010-12-27 11 views
5

大量のファイルを処理する(tiffファイルからtiffに変換する)winformを作成しています。すべてのコードをボタンの背後に置いています(btnProcess)。これは良いアイデアですか?それは動作しますが、私はwinformから離れて、このプロセスに完了するまで空白のウィンドウが表示されます。私はバックグラウンドワーカーについて聞いた。バックグラウンドワーカーの目的は何ですか?大量のデータを処理しているときにレスポンシブUIを維持するにはどうすればよいですか?

+1

同様の問題に直面している他のユーザーを支援し、可能な限り最良の回答を引き付けるために、できるだけわかりやすいようにご質問ください。 "winform question"はどちらの目標も達成できないでしょう。 –

+0

良い提案。私は新しいタイトルが好きです、それはより理にかなっています。私はちょうどそれらの派手な言葉や技術的な専門用語を知りませんでした。 –

答えて

9

ここで必要なのはマルチスレッドです。これは、2つ(またはそれ以上)のスレッドが並行して実行されることを意味します。そのうちの1つは、ウィンドウを描画するUIスレッドです。あなたの場合、UIスレッドでコードを実行しているので、コード実行中にUIレンダリングがブロックされます。

BackgroundWorkerの目的は、新しいスレッドで操作を開始することであり、必要なものです。

+0

また、大量のファイルを扱っているので、複数のファイルを並列に処理できるように、複数のバックグラウンドスレッドを考慮する必要があります。 –

+0

絶対に。しかし、これは主にマルチコアCPU(最近のCPUのほとんどの場合)に役立つことに注意する価値があります。これは、X BackgroundWorkersを作成するのではなく、Parallel Extensionsのようなものを使ってforループをマルチスレッド化することで、より簡単に達成できます。 –

+1

@Raj:File IOについて話を始めるときは注意が必要です。これは最も遅いプロセスであり、複数のファイル操作をマルチスレッド化しても、パフォーマンスの向上は保証されません。 – IAbstract

3

BackgroundWorker class

のBackgroundWorkerクラスは別の、 専用スレッド上で操作を実行でき ことができます。時間がかかる 操作がダウンロードとデータベースのようになりました インターフェイス(UI)が のように見えて、 の実行中に応答が停止している可能性があります。応答性の高いUI が必要で、このような操作に長時間の遅延 が関連付けられている場合、 BackgroundWorkerクラスは という便利なソリューションを提供します。

上記のリンク先のページには、の完全なBackgroundWorkerの例が含まれています。

+1

マルチスレッドのパラダイムが初めての方は、バックグラウンドワーカーを使用することをお勧めします。マルチスレッドプログラミングの抽象概念です。 –

+0

非同期のすべてのサービスメソッドを使用している場合は、タスク。それはパフォーマンスを低下させるかもしれません(大規模なアプリケーションで)? –

+0

これは非常に広い質問です。並行して実行するタスクが多すぎると、ある時点でシステムが過負荷になります。しかし、詳細がなければ、5つのタスクか100かを判断することは不可能です。 –

2

アプリケーションによって異なります。これが極端に長くない単一用途のアプリケーションであり、唯一の問題は画面がペイントしないことです。それは私のような音ですが、ループにApplication.DoEventsをスローして終了してください。

関連する問題