2012-01-13 6 views
1

私はこのフォームでボタンを持っています... このコードこのproblmeを解決するにはどうすればいいですか?==クロススレッド操作が無効です:コントロール 'frm_proc'が作成されたスレッド以外のスレッドからアクセスされました

_BackgroundWorker.RunWorkerAsync(new MethodInvoker(() => 
      { 

       progressBar1.BeginInvoke(new MethodInvoker(() => progressBar1.Visible = true)); 
       Print formp = new Print(); 
       formp.ShowDialog(); 
       this.Hide(); 


      })); 

を書くイベントをクリックしてくださいしかし、私は以外のスレッドから

答えて

1

あなたcan'tアクセス制御を解決することができますどのようにthis.Hide()... 上のエラーをrecived GUIスレッド、InvokeRequiredを使用する必要がありますそのような場合にチェックする。その場合は、GUIスレッドで呼び出しを呼び出す必要があります。

コンテキストなしではわかりにくいですが、このコードを非同期で実行する必要があるかどうかを尋ねてください。

+1

この場合、彼はGUIスレッド(彼はBackgroundWorkerにあります)にいません。チェックを行う必要はありません。 –

+0

良い点は、回答が少し速かった:-) – diggingforfire

0

これを試してみてください:

this.Invoke(new System.Action(()=>this.Hide())); 

あなたはそのフォームのメッセージポンプを実行しているもの以外のスレッドからUIコントロール(またはその親フォーム)にアクセスすることはできません(一般的に、それはUIスレッドだという)。この場合、thisはフォーム自体を指します。

+0

感謝のクリスが、このショーのエラー:ラムダ式をデリゲートタイプではないため 'System.Delegate'とタイプすることはできません –

+0

それに応じて編集されました。 –

+0

ありがとうChris私は解決するBy:> this.Invoke((Action)delegate {this.Hide();}); –

関連する問題