Hammockフレームワークを使用して、SilverlightアプリケーションからRestサービスへの非同期サービス呼び出しを行っています。 'completed'コールバックでは、ビューのコンボボックスにバインドされているObservableCollectionを更新しています。Silverlightアプリケーションでクロススレッドアクセスが無効です
'OnPropertyChanged'イベントハンドラで「無効なクロススレッドアクセス」例外がスローされています。
これは、ハンモックがUIスレッドでコールバックを実行していないためですか?そうでない場合は、どうしてですか?それは、フレームワークが扱うべき機能性のようです。何か不足していますか?完成した各ハンドラで自分自身でUIスレッドの呼び出しを処理したくないのは確かです。
public void LoadMyData()
{
var request = new RestRequest();
request.Path = "MyRestUrlText";
var callback = new RestCallback(
(restRequest, restResponse, userState) =>
{
var visibleData = new ObservableCollection<MyDataType>();
var myData = JsonConvert.DeserializeObject<MyDataType[]> restResponse.Content);
foreach (var item in myData)
visibleData .Add(item);
this.MyBoundCollection = visibleData;
OnPropertyChanged("MyBoundCollection");
});
var asyncResult = _restClient.BeginRequest(request, callback);
}
おかげで
私はMVVMを使用しています。私は、UIスレッド上にある必要があるコードはOnPropertyChangedであることを知っていました。しかし私はそこにBeginInvokeを入れることを考えなかった。素晴らしい提案。 –