2011-06-29 2 views
4

バックグラウンド(スレッドプール)スレッドで次のコードを実行すると、UnauthorizedAccessException(「無効なクロススレッドアクセス」)が表示されます。バックグラウンドスレッドでBitmapImageを作成するWP12

var uri = new Uri("resourcevault/images/defaultSearch.png", UriKind.Relative); 
var info = Application.GetResourceStream(uri); 

// this line throws exception.... 
this.defaultSearchImage = new BitmapImage(); 

答えて

2

理由は、バックグラウンドスレッドをUIの更新に直接使用できないためです。代わりに、Dispatcherを使用してUIスレッドにデータをマーシャリングする必要があります。このような何か:

var uri = new Uri("resourcevault/images/defaultSearch.png", UriKind.Relative); 
var info = Application.GetResourceStream(uri); 

Dispatcher.BeginInvoke(() => {   
    this.defaultSearchImage = new BitmapImage(); 
}); 
+1

おかげで、あなたが唯一のUIスレッドでのBitmapImageクラスを作成することができます表示されますが、これは、唯一のUIで使用されようとしていると本質的にUIに縛られているので、本当に理にかなって... – AwkwardCoder

+0

@AwkwardCoder - うん、いつでもUI要素(インスタンス化または更新)を操作する必要がある場合は、UIスレッドで行う必要があります。 XAMLに – keyboardP

+0

があります。

関連する問題