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

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

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

Re[2]: MVVMで他のスレッドからコントロールにアクセス


(過去ログ 72 を表示中)

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

■42296 / inTopicNo.1)  MVVMで他のスレッドからコントロールにアクセス
  
□投稿者/ 倉田 有大 (741回)-(2009/10/12(Mon) 15:01:25)

分類:[.NET 全般] 

こんにちは倉田 有大です。
MVVMで他のスレッドからコントロールにアクセスするにはどうすればいいでしょうか?
ぐぐると、WPFではDispatcherを使うとのことですが、MVVMの場合どのように実装すればいいか迷っています。

昔のC#だと

private void test(object source, FileSystemEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new FileSystemEventHandler(this.test), new object[] { source, e });
return;
}
//処理
}

こんな感じに実装していたのですが。

Dispatcherを使うのであれば、Viewに実装するのでしょうか?ViewModelの実装は可能なのでしょうか?
引用返信 編集キー/
■42297 / inTopicNo.2)  Re[1]: MVVMで他のスレッドからコントロールにアクセス
□投稿者/ Hongliang (480回)-(2009/10/12(Mon) 15:16:36)
Application.Current.Dispatcher でも使えば良いんじゃないすか?
引用返信 編集キー/
■42299 / inTopicNo.3)  Re[2]: MVVMで他のスレッドからコントロールにアクセス
□投稿者/ 倉田 有大 (742回)-(2009/10/12(Mon) 15:57:49)
2009/10/13(Tue) 01:01:51 編集(投稿者)
2009/10/12(Mon) 15:58:31 編集(投稿者)

<pre><pre>Hongliang さん、返信ありがとうございます。
Application.Current.Dispatcherを元に検索し
http://blogs.wankuma.com/naka/archive/2009/02/12/168020.aspx
中さんのページを見て実装できました。


ViewModelに
using System.Windows;
を追加して

public void End(object o, EventArgs e)
        {
            System.Windows.Threading.Dispatcher d = System.Windows.Application.Current.Dispatcher;
            if (d.CheckAccess() == false)
            {
                d.Invoke(new EventHandler(End), new object[] { o, e });
                return;
            }
            canDownloadFlag = true;
        }

上記のコードで動作しました。

ところで、d.CheckAccess()なんですが、インテリセンスで表示されなかったんですよね。
ビルドはできたので不思議。

Application.Current.Dispatcher が最初見つからなかったので、ViewからDispatcherをViewModelに渡してやろうかなと考えていました。
スムーズに実装できました。ありがとうございました。

Application.Current.Dispatcher この一言だけでずいぶんスムーズに事がすすみました。
返信がなかったらまだずーっとぐぐっていたと思います^^;</pre></pre>

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -