0

WPF (Windows フォームも適用可能) アプリケーションがあり、一部の機能については他のチームに依存しています。メインアプリの安定性を損なうことなく、他のチームの機能を実行する最善の方法を探しています。

他のチームの機能にはいくつかの GUI が含まれており、他のサービスやデータベースなどを呼び出している可能性があります。また、他のチームの機能を UI スレッドで実行することが懸念されます。これは、適切なテクニックに従っているかなどのコーディング標準について確信がないためですサービス実行時のバックグラウンド スレッド。私たちの選択に合わせて API 設計について提案することができます。次の2つのオプションを考えています

  1. API は非同期呼び出しを行いますが、ディスパッチャーを入力として受け取ります。ディスパッチャーの受け渡しにあまり自信がない

  2. サービス/GUI メソッドに API の明示性を提供して、バックグラウンド スレッドでサービスを呼び出し、完了時にモデルを GUI に渡すことができるようにします。しかし、それには私たちの側でさらに多くの作業が必要になります。

または、他のチームのコードを実行しているときにアプリケーションの安定性を処理する場合に対処するより良い方法があります。

4

1 に答える 1

2

オプション 3:

「 UIThreadInvoker Action<Action>」または静的参照のどこかに保存できるものを渡して、UI スレッドで何かを行う必要があるたびにそれを使用します。

あなたの側:

//App_Startup or somewhere during initialization
TheirApi.UIThreadInvoker = x => Dispatcher.BeginInvoke(x);

彼らの側:

  public class TheirAPI
   {
       public static Action<Action> UIThreadInvoker {get;set;}

       public void SomeMethod()
       {
           //Pass SomeOtherMethod() to the UIThreadInvoker
           UIThreadInvoker(SomeOtherMethod);
       }

       public void SomeOtherMethod()
       {
           //this will be executed by your dispatcher
       }
   }
于 2013-05-03T16:53:30.417 に答える