使用API​​提供的回调函数,但没有结果?(C#)

时间:2016-06-25 04:37:17

标签: c# api callback

我正在使用名为 WindAPI 的API,它提供了来自中国市场的财务数据。此API 提供了一个方法调用wsq(),它将通过回调函数向用户的程序提供 RealTime 价格数据!

我在c#中编写了一些简单的代码,尝试使用这个wsq()方法,但没有得到任何结果。我想知道代码中一定有一些错误,但是找不到它! 我是C#和编程的新手,所以如果这是一个新手的错误,不要嘲笑我:)

这是代码,我会尽可能多地给出评论,这样你就可以快速找到误解。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//-----------------------------
using WAPIWrapperCSharp;  //the namespace in API dll(official provided)
using WindCommon;         //the namespace to process the data formats (official provided)

namespace WSQ2String
{
    class WSQ2StringSample
    {
        static void Main()
        {
            Console.Write("Begin......");
            Console.ReadLine(); 
            //--------------------creat the new API object and log on
            WindAPI w = new WindAPI();
            Console.WriteLine("New API created!");
            w.start();
            Console.WriteLine("API log on!");
            //--------------------request for the realtime data through w.wsq() method
            int errorId = 0;
            ulong reqId = w.wsq(ref errorId, "150195.sz", "rt_date, rt_time, rt_lastest", "", myCallback);
            Console.WriteLine("errorId = {0}", errorId);
            //----adding a control line which will stop the main program and wait for myCallback function to be called
            Console.ReadLine();    //after the data arrived, the test is over, and we press a key to let the main program continue
            w.cancelRequest(reqId);
            w.stop();
            Console.Write("End......");
            Console.ReadLine();
        }
        //----
        static void myCallback(ulong reqId, WindData wd)
        {
            Console.WriteLine("wsq data gotback......");
            //----transfer the official WindData format to String, and output to the screen 
            string s = WindDataMethod.WindDataToString(wd, "wsq");   //the method is in WindCommon namespace 
            Console.Write(s);
        }
    }
}

我的理解是,当我使用w.wsq()请求数据服务时,当价格发生变化时(那是事件),myCallback()将被调用并导出数据屏幕!

我添加readline()的原因是为了防止主程序运行得太快,并在事件发生前结束(价格变动)。在那种情况下,myCallback()将无法被调用!

但是当我运行代码时,在“errorId = 0”显示之后,我等了好几分钟仍然没有结果!我确认价格已经改变(通常在几秒钟内改变)。

这是我得到的结果,我找不到原因....(我只是在屏幕上输入行)

>>Begin......
>>New API created!
>>API log on!
>>errorId = 0

然后prgram只是停在那里而没有发生任何事情! 如果有人能向我解释,我会非常感激....

先谢谢你了!

更新: 根据下面的评论,我给出了解决方案的zip文件。 还有API dll和它的源代码。

My solution files and dll

所以,有人帮忙吗?

0 个答案:

没有答案