DuplexChannelFactoryを使用してサーバーに接続するC#のプログラムがあり、そのサーバーはコールバックによってクライアント側からメソッドを呼び出すことができます。問題は、接続がコールバックメソッドから作成された場合にメインスレッドにアクセスする方法がわからないことです。 。オブジェクトを渡すことによってこれを行う方法はありますか、または追加の通信レイヤー(BD、ファイルなど)を実装する必要がありますか?
これがそれほど混乱しないことを願っています。
前もって感謝します。
DuplexChannelFactoryを使用してサーバーに接続するC#のプログラムがあり、そのサーバーはコールバックによってクライアント側からメソッドを呼び出すことができます。問題は、接続がコールバックメソッドから作成された場合にメインスレッドにアクセスする方法がわからないことです。 。オブジェクトを渡すことによってこれを行う方法はありますか、または追加の通信レイヤー(BD、ファイルなど)を実装する必要がありますか?
これがそれほど混乱しないことを願っています。
前もって感謝します。
あなたの質問を完全に理解しているかどうかはわかりませんが、突き刺します:
質問に対する私の理解:
クライアントとサーバーがあります。クライアントがサーバーに対して webservice 呼び出しを行うと、サーバーは、計算の過程で何らかの種類の呼び出しをクライアントに戻すことができます。このレベルのインフラストラクチャは機能していますが、コールバックの状態と元のリクエストの状態の間の通信が困難になっています。
共有しようとしている状態の性質に応じて、いくつかのオプションが表示されます。
1) 共有しようとしている状態が回転しておらず (IE、リクエストを行ったときにわかっている場合)、それほど大きくない場合、最も賢明なオプションは、その状態を一緒に渡すことだと思いますサーバーがそれをコールバックに戻すことができるように、webservice 呼び出し。
2) 状態が回転している場合は、ある種の厄介な、しかしスレッドセーフなグローバルメカニズムを介して、状態へのアクセスを提供できます。おそらく、非常に悪意のあるシングルトン、または同様のものです。
3) 状態が回転していないが大きい場合は、最初の要求を送信する前に、サーバーの要求を事前に計算することを検討してください。
さまざまな手法がありますが、これらはごく一部ですが、適切な回答を得るには質問に十分な情報が含まれていません。
メインスレッドにアクセスしたい理由は何ですか? UI を更新する必要がありますか?メイン スレッドでのみ実行できますか?
その場合は、UI スレッドで実行されるデリゲートをキューに入れることができる System.Windows.Forms.Control.Invoke を見てください。