dotNetプログラミング初心者のための情報を集めました。VB2005の簡単なTips集など、初心者の方の手助けに。BackGroundWorkerでのバックグラウンド処理。編)「BackGroundWorkerでのバックグラウンド処理(つまづき編)」では、DoWorkイベントに親スレッドのコントロール操作を記述していると、InvalidOperationExceptionエラーが発生するということを掲載しました。ProgressChangedイベントとRunWorkerCompletedイベントを使って、コントロールにアクセスする方法も掲載しました。できるだけ自由にアクセスする方法はないものか、自分なりに調べてみました。一応「解決編」としていますが、根本部分まで理解できたかどうかは。できるだけ自由にアクセスする方法は、他には見つからなかったもので。その方法と言うのは、デリゲート(Delegate)とInVokeを使用する方法です。プログラミングのプロの方には、当然だと思われるでしょうが、初心者にはかなり敷居が高いです。>>>>>>まず、何故別スレッドからアクセスすることが出来ないのか、自分なりに調べた結果は以下の通り。面倒なことが発生する可能性が有る。メインのフォームの設定と矛盾した設定をしてしまう可能性がある。・フォーム上のコントロールのメソッドなどは、一般的には別スレッドから安全に呼び出すことが保証されていない。詳しくはないんですけど。安全に呼び出すために用意されているのが、各コントロールのInVokeメソッドです。Invokeメソッドを経由してメソッドを呼び出すと、必ずコントロールを作成したメインのスレッドから呼び出しが行われるということです。そこで、この様な処理を行う必要がある場合は、以下のような手順が必要となります。1:各コントロールに対する操作メソッドを作成する。2:Delegate宣言を行う。3:Delegateを型とした変数を宣言する。デリゲートするメソッド名"を引数に指定する。→宣言のときにNewキーワードをつけない場合、適切な箇所でインスタンスを生成する必要がある。4:フォームコントロールのInvokeメソッドを利用してデリゲートしたメソッドを実行する。Invokeメソッドの引数は、以下の通り。※VB2005以降は、この方法でコントロールを操作しないとエラーが発生します。※デリゲートは、メソッド数分必要です。初心者を対象としたVB2005の書籍で、「BackgroundWorkerを使えば簡単にスレッド処理が出来る」と言う記述を良く見かけます。デリゲート、InVokeなんかは、初心者では思いつきませんって。実際にコーディングしてみた例は、次回に掲載させていただきます。IIS(2)VPN(6)ツール(12)日記(18)トラブル対応日記(49)最近のTipsOutlook.comに、メールアカウントを追加しようとするが、2つ目からできない。Windows7でSP1の適用に失敗することがある。複数ユーザー利用の場合、ArcseveD2DのAFD2DMonitor.exeが各ユーザーで起動し、ログファイルが肥大化する。XenSeverにCentOS6.4をGUIインストールする場合。JavaRuntimeの自動アップデートをやめようと設定しても反映されない。Windowsタスクスケジューラにバッチ・スクリプトを登録しても実行しない。グループウェアのデスクネッツをIE8で開くと、ログオンが二つ表示され、ログオンできない。(ユーザーを選択できない。)スクリプトを利用して、メールを送信する。(SmtpAuth)WindowsXPSP3でExcel2007、Excel2010を使っているとき、コピーなどをすると、セルに入力した最初の1文字が変勝手に確定されるXenServer6.0で、WindowsXPSP3のVMを動かしている状態で、XenDesktopを導入すると、VMのXenserverToolsが無効となってしまう。IT@SOHOSeesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。