ユーザーがノートを作成し、ノートを画面上で常に動かすことができるアプリケーションのTodoタイプを作成しています。定数の更新と呼び出しサブチェンジ:このエンティティは現在読み取り専用のriaサービスです
このため、一般的なコードは次のとおりです:
private void SaveChanges()
{
if (!_context.IsSubmitting)
{
this.busyIndicator.IsBusy = true;
_context.SubmitChanges(subOp =>
{
this.busyIndicator.IsBusy = false;
if (subOp.Error != null)
{
ErrorWindow window = new ErrorWindow(subOp.Error.Message);
window.Show();
}
}, null);
}
}
しかし私はbusyindicatorを使用して停止することにより、UIをブロックしています見ることができるように、「ノート」の位置のすべての変更に私はそれをデータベースに保存する必要がありますユーザーは送信中に何らかのアクティビティーを実行する必要があります。これは特にこのアプリケーションでは悪いことです。代替手段として、私はこのコードを使用して、異なるスレッド上にこのコードを移動しようとしたので:
private void SaveChanges()
{
ThreadPool.QueueUserWorkItem(waitcall =>
{
if (!_context.IsSubmitting)
{
//this.busyIndicator.IsBusy = true;
_context.SubmitChanges(subOp =>
{
Dispatcher.BeginInvoke(() =>
{
//this.busyIndicator.IsBusy = false;
if (subOp.Error != null)
{
ErrorWindow window = new ErrorWindow(subOp.Error.Message);
window.Show();
}
});
}, null);
}
});
}
これは動作し、アプリケーションがまだ応答のまま。しかし、今のコンテキストは、変更を送信され、ユーザーは、エンティティのプロパティを変更するなどの結合試して、画面の周りに移動することによって、同じノートで動作し、私は例外を取得しながら:
このエンティティは現在、読み取り専用です
コンテキストが変更を送信しているため、これは明らかです。しかし、私はダムのビジーインジケータを表示しないで、まだこれらの例外を取得しないでアプリケーションを応答し続けることができる任意の方法はありますか?
を使用すると、すべての変更にサヴァンされているなぜですか?送信前にユーザーが変更を停止するまで待つのはなぜですか? – Yahia
すべての変更を保存すると、「ユーザーはメモを移動しなくなります」という意味でした。ユーザーがメモを移動しなくなったときに保存する必要があります。典型的には、これは何が起こるかである:1)ユーザは音符を動かすことを「止める」2)サブチェンジの火災3)サブチェンジ中に、ユーザは再びノートおよび例外の発火を動かす。 – TCM
あなたのコードのように聞こえるのは、リエントラントでは正しく処理されません...なぜ、最初のサブミットが完了した後で2番目の変更を送信しないのですか? – Yahia