2016-09-11 76 views
0

私はここに何かがないと思う。私は外部ソース(通常は非UIスレッド)から呼び出す必要があるいくつかのメソッドを持つWPFフォームを持っています。フォームへの参照を取得し、Dispatcher.Invokeを介してメソッドを呼び出そうとすると、UIスレッドにマーシャリングされます。問題は、InvokeがActionを起動するときにこのコードが機能しないことです。結果は常に空文字列です(Invokeが同期であると書かれていても)。Dispatcher Invokeの結果を待つ方法を教えてください。

public string GetValueById(string id, string value) 
    { 
     Application.Current.Dispatcher.Invoke(() => 
     { 
      var main = Application.Current.MainWindow as MainWindow; 
      if (main != null) 
      { 
       return main.GetValue(id); 
      } 
     });    
     return ""; 
    } 

私はこの作業をどのように行うかについて頭を悩ますことはできません。

+0

return Application.Current.Dispatcher.Invoke(>)=> {etc ...}); –

答えて

5

あなたはthe documentation for that Dispatcher.Invoke overloadを見れば、あなたはそれをFunc<TResult>コールバックを渡した場合、それはそのコールバックを実行することにより、返されたTResultを返すことがわかります。あなたがしなければならないことは、実際に戻り値を使用することです。

public string GetValueById(string id, string value) 
{ 
    return Application.Current.Dispatcher.Invoke(() => 
    { 
     var main = Application.Current.MainWindow as MainWindow; 
     if (main != null) 
     { 
      return main.GetValue(id); 
     } 
    }); 
} 
関連する問題