2

そこで、1 週間ほど前に、activex と UDP について質問しました。ここにあります:

C# UDP ソケット クライアントとサーバー

ここで、UDP 経由で定義済みの文字列を送信するための 2 つのアプリケーション (送信側) を作成しました。もう 1 つは Web ページから呼び出される activex コンポーネントで、そのスレッドはバックグラウンドで動作しています。UDP メッセージが到着すると、そのメッセージが処理されます (データベースへの書き込み、log.txt への書き込みなど)。

私が最後に必要とすることは、データを返すことです (それが文字列になるかどうかはまだわかりません)。ただし、呼び出される activex のメソッドは void である必要があります。文字列にすると、スレッド化が機能せず、最初のメッセージしか到着しないためです。

私の質問は、それを行う方法ですか?void 関数からデータを返すには? たとえば、Web アプリは現在、次のように activex DLL を呼び出しています。

    ClassLibrary1.Class1 activex = new ClassLibrary1.Class1();
    activex.StartThread();

そして、StartThread() はリッスン スレッドを呼び出し、バックグラウンドで動作します。UDP メッセージが到着すると、上記のような処理を実行します。

スレッド (イベント) で値を返すにはどうすればよいですか? Web アプリはそれをキャッチして使用しますか?

どうもありがとう。

4

3 に答える 3

1

基本的に、両方の場所 (スレッドとスレッドを開始した場所) からアクセスできる場所にデータを保存する必要があります。だから、私の頭の上からいくつかのオプションがあります。

  1. データベースに格納する
  2. 特定のオブジェクト (必要なタイプは何でも) を作成し、両方の場所からアクセスできる場所に保存します。たとえば、シングルトン。ClassLibrary.Class1 クラスにプロパティを作成するのが、より簡単で優れた解決策です。Class1 クラス内からプロパティを設定し、Class1 クラスのインスタンスを作成した場所から取得します。
  3. Class1-class にイベントを追加します。このイベントは、ジョブの実行が終了したときに発生します。そして、EventArgs にいくつかのデータを追加します。

ここでは、スレッドが実行中の処理が完了したときに通知を受け取ると想定しています。

編集:追加されたイベント

于 2013-11-13T14:31:53.807 に答える