情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

BackgroundWorkerを導入したい このエントリーを含むはてなブックマーク

処理中にUIが応答しなくなってしまうので、重たい(単純に時間がかかる)処理をBackgroundWorkerを利用して別スレッドで実行して処理中もUIを操作できるようにしたいと思ったのですが・・・ いざ、やってみるのは簡単。

やるべき事と言えば、BackgroundWorkerコンポーネントを、フォームにボタンを配置するがごとく、フォームの下にある領域にドラッグアンドドロップして、そのBackgroundWorkerのDoWorkイベントハンドラに処理を書き、処理したいときにRunWorkerAsyncメソッドを呼び出すだけ。

たしかに、これで別スレッドで重たい処理が実行されます。マルチスレッド万歳

ただし、このままだと、せっかく処理を別スレッドにしてUIが動かせても、途中経過の報告をUI側にしたりすることが出来ません。というのも、UIへの操作は、BackgroundWorkerの、ProgressChangedイベントハンドラ経由で実行しなければならないからです。

また、その重たい処理というのが一つのメソッド呼び出しだけだったとすると、途中経過を報告する作業を追加したいところですが、そのコードを上手くBackgroundWorkerのためだけのコードにならないようにしたいところです

(まだいろいろ試したわけではないのですが)自分のイメージでは重たい処理を行うクラスに、「現在の状態を取得するメソッド」や、「作業の区切り目で登録したイベントハンドラを呼び出すようにする」といったことが考えつくんですが、はて、どうするべきなのか、もっと調べてみようと思います。

.NET | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。