2017-01-11 8 views
0

私は、複数のインスタンスのWPFアプリケーションを一緒に開くことができるシナリオを持っています。特定のインスタンスによってデータモデルが汚れてしまった場合は、現在のレコードがダーティになっていることを示すデータベースを更新します(レコードが汚れているかどうかを示すデータベースの列があります)。レコードがダーティになっていることを他のインスタンスに通知し、それ以上の変更は許可しないでください。変更が行われると、私はこの列を更新して、それはもはや汚れていないと言っています。WPFがアプリケーションの他のインスタンスにロックを通知する

MVVMの方法で他のインスタンスに変更通知を実装する方法を教えてください。

1つのアプローチは、静的変数isRecordLockedを保持し、falseの場合はセットをチェックしてから変更を許可することです。

答えて

0

この問題は、並行性の問題と呼ばれます。並行性の問題に対処するには、オプティミスティック・ロックまたはペシミスティック・ロックの2つの方法があります。私はあなたが問題のより良い理解を得るためにそれらをもっと読むことをお勧めします。表に列を追加し、

  1. まず:私は読書がこの問題を解決するためのhere

    私のアプローチであることをお勧め一つの記事には、以下のようなものになるだろう。これは各行の最終更新日を格納します。それをLastUpdatedDateと呼ぶことにしましょう。

  2. wpfアプリがデータを読み込むと、すべてのデータが元のバージョンの行になります。ユーザーが更新を行い、[保存]をクリックすると、データベースにフラグをdirtyとして設定する代わりに、LastUpdatedDate列の値がデータを読み込んだときと同じであるかどうかを照会できます。そうであれば、通常どおりに保存し続けることができます。そうでない場合は、(並行処理の例外を投げてUIで処理する)ユーザーに何らかの通知をし、データの再読み込みを依頼する必要があります。

静的変数を保持するあなたのアプローチは、私が知る限り動作しません。その理由は、アプリケーションの複数のインスタンスである場合、それらは別々のAppDomainにあり、その外部と通信することができないからです。したがって、静的変数は各インスタンスに固有です。しかし、複数のクライアントが単一のサーバー側と対話している場合、サーバー側に静的変数を作成すると、そのアプローチが有効になります。

関連する問題