2011-09-26 11 views
0

私は、カスタムインターフェイスでデュプレックスチャンネルを使用してWCFに接続するwinFormアプリケーションを持っています。WCFがWinFormイベントでデュプレックスイベントを発生させてnullにする

コールバックは正常に機能しますが、コールバックイベントからイベントを発生させようとすると、私は泥の中で立ち往生します。

私がWCFサービスに接続するために使用するサポートクラスでは、単一のイベントを使用してメッセージを生成し、メインアプリケーションフォームの出力テキストボックスコントロールに表示します。

サポートクラスでOnEventのが定義されている:

protected virtual void OnMsgEvent(SurfaceArgs e) 
{ 
    MsgEventEventHandler temp = MsgEvent; 
    if (temp != null) 
    { 
    temp(this,e); 
    } 
} 

WCFコールバックから実装イベントが定義されている:

public void OnEvent4(string sValue) 
{ 
    OnMsgEvent(new SurfaceArgs(sValue, EventLogEntryType.Information)); 
} 

私はWCFイベントから電話をかけるときは、 のOnMsgEvent検証nullは、常にnullになります。

if (temp != null) 

これは、WCFからイベントを発生させた場合とは別のスレッドや何かにあるかのように、呼び出す方法や委任方法がわからないため、OnMsgEventを呼び出すことができます。

現時点では、メインフォームへのポインタを渡してパブリックメソッドを呼び出しています。私はこの一時的なソリューションがTextboxコントロールのInvokeを必要とすると予想しましたが、そうではありません。

解決策はおそらく単純ですが、私はまだそれを見ていません。 =)

答えて

0

私が後に発見さsimilair質問調査した結果: Using a Callback to pass an Event to a WCF Client

を私は「この」オブジェクトタイプとして渡されているリンク先の記事で使用されるコールバックへの参照に気づきました。

初期クライアント設計では、InstanceContextの作成時にCallbackクラスの新しいインスタンスが使用されました。

したがって、代わりに: _context = new InstanceContext(new IMyCallback());

これは、私がそれを変更したときの予想通りに機能しました。 _context = new InstanceContext(this);

サポートクラスはIMyCallbackインターフェイスを拡張しているため、 "this"を渡すことによって(オブジェクト実装)のInstanceContextの要件を満たしている可能性があります。それは働くので、私は不平を言っていません!

関連する問題