2017-08-03 17 views
0

TaiPan Realtime COMサーバーからイベントを取得しようとしています。私はそこから他のデータを抽出することができます。キーへのアクセスが正しく機能しています。C#COMイベントが起動されない

しかし、私がイベントを取得しようとすると、その機能は何とか起動されません。うまくいけば、これは小さな間違いです。読みやすくするために、小さなテストコードを作成しました。これはあなたにとって読みやすいです。これらのIDをStreamに追加すると、Visual Basicデバッガが動作し、com_testのCPUアクティビティが表示されます。

私はイベントがありますが、どうにかしてイベントハンドリングに間違いました。

ありがとうございました。

using System; 
using System.Collections.Generic; 
using TaiPanRTLib; 

namespace com_test 
{ 

    class Program 
    { 

     static void Main(string[] args) 
     { 

      var handle = new handle(); 

      handle.start(); 

      Console.ReadLine(); 

     } 

    } 

    public class handle 
    { 

     public int counter; 

     // this is a list contains the internal numbers of the taipan Software 
     public static List<int> numbercodes = new List<int>(new int[] { 78379670, 78379685, 78379692, 78379669, 78379729, 78379672, 78379674, 78379698, 78379682, 78379681, 78379704, 78379689, 78379694, 78379673, 78379697, 78379687, 78379702, 78379690, 78379668, 78379671, 78379715, 78379666, 78379706, 78379727, 78379679, 127289939, 78379677, 78379693, 78379676, 78379678, 78379680, 78379688, 78379726, 78379686, 78379696, 78379675, 78379667, 78379703, 78379691, 78379684, 78379700, 78379699, 78379705, 78379695, 78379701, 78379664, 78379716, 78379982, 78379665, 78379707, 78379728, 78379717, 78379719, 7837971 }); 

     void TPRTDataStream_Bezahlt(int SymbolNr, float Kurs, float Volume, DateTime Zeit) 
     { 
      Console.WriteLine("peng"); // never see this in window - so not fired? 
      counter += 1; 
     } 

     public void start() 
     { 

      TaiPanRealtime TPRTObject = new TaiPanRealtime();     // connects to launches Application 
      DataStream TPRTDataStream = (DataStream)TPRTObject.DataStream;  // attach to the DataStream Object. 

      foreach (int db_num in numbercodes) 
      { 
       TPRTDataStream.Add(db_num, 0);         // This adds the internal dbnumber to the Stream 
      } 

      TPRTDataStream.Bezahlt+=new _IDataStreamEvents_BezahltEventHandler(TPRTDataStream_Bezahlt); 

      while (true) 
      { 
       Console.WriteLine(counter);  // counter stays 0 all the time 
       System.Threading.Thread.Sleep(1000); 
      }; 

     } 
    } 

} 
+0

まだコードをステップしましたか? –

+0

私の不明な点は申し訳ありませんが、私はそのようにする方法をGoogleに伝える必要があります。 CPUの縫い目が今やピークに達しています。私の推測は、私は間違ったイベントを処理することです。私のメインコードはそれ以上のものです。元のコードでは、そのcomサーバーから大量のデータを抽出します。しかし、イベント.....とにかく私はgoogleとそのコードをステップしてみてください。 – Steven

答えて

0

解決策TaiPanサービスが見つかりました。イベントを正しく処理するには、ビジュアルベーシックの参照プロパティで「Interop Typesを埋め込む」をfalseに設定する必要があります。ここではスクリーンショットです:

screenshot properties

が、これは他の人に役立ちます願っています。

関連する問題