C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: コールバックメソッドの同期


(過去ログ 119 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■70073 / inTopicNo.1)  コールバックメソッドの同期
  
□投稿者/ C#研究者 (37回)-(2014/02/23(Sun) 10:44:05)

分類:[C#] 

実行環境 Windows7 32bit
開発環境 Windows7 32bit VisualStudio C#2010

非同期のメソッドからコールバックした時にエラーが発生します。
private ReturnHandler(Object sender, EventArgs e)
{
listBox1.Items.add("test"); //エラー発生
}

なのでこのような記述をしているのですが

listBox1.Invoke((Action)(() =>
{
listBox1.Items.Add("test");
}));

この記述だとコントロールに依存してしまいます。
他のコントロールも Invokeの中のActionで使いたいのですが他によい記述はないでしょうか。


引用返信 編集キー/
■70074 / inTopicNo.2)  Re[1]: コールバックメソッドの同期
□投稿者/ Azulean (273回)-(2014/02/23(Sun) 11:01:25)
考えられるとしたらこの辺でしょうか。

・特にこだわらず、Form に対して Invoke する形にする。(特定のコントロールにで違和感があるのであれば、それらが張り付いているフォームに対する処理とする)
 例に挙がっているコードであれば、Invoke(...) と書けば Form に対する Invoke なので ListBox といった個別のコントロールに依存する状況からは変わります。

・メインスレッドの SynchronizationContext をあらかじめ取得しておき、それに対して Send または Post する。
http://msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext

・ISynchronizeInvoke インターフェースを実装したオブジェクトをもらうクラスを設計する。
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.isynchronizeinvoke
引用返信 編集キー/
■70079 / inTopicNo.3)  Re[2]: コールバックメソッドの同期
□投稿者/ C#研究者 (38回)-(2014/02/23(Sun) 16:27:25)
なるほど、いろいろありますね。
ありがとうございます。
解決済み
引用返信 編集キー/
■70102 / inTopicNo.4)  Re[1]: コールバックメソッドの同期
□投稿者/ Jitta (133回)-(2014/02/24(Mon) 20:47:22)
2014/02/24(Mon) 20:47:46 編集(投稿者)
No70073 (C#研究者 さん) に返信
> この記述だとコントロールに依存してしまいます。

 う〜ん?

> private ReturnHandler(Object sender, EventArgs e)
> {
>     listBox1.Items.add("test"); //エラー発生
      ^^^^^^^^
> }

中のコードがインスタンスに依存しているように思いますが?
特定のインスタンスに依存しているコードに、
特定のインスタンスに依存するコードを追加するのに、
何をためらうことがあるのでしょうか?


> 他のコントロールも Invokeの中のActionで使いたい

 それとも、こういうこと?

listBox1.Invoke((Action)(() =>
{
    listBox1.Items.Add("test");
    listBox2.Items.Add("TEST"); ←
}));



> 非同期のメソッドからコールバックした時にエラーが発生します。

 細かいことですが、「コールバックされた」ですよね。
非同期のメソッドを「呼び出す」と、非同期メソッドから「呼び戻される」。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -