Error using ThomsonReuters.Desktop.SDK

2»

Answers

  • @gordon.konheiser

    Is this code work for you?

        class Program
        {
            IRealtimeService realtime;
            public DispatcherFrame frame;

            static void Main(string[] args)
            {
                Program prog = new Program();
                prog.run();   
            }
            public void PushFrame()
            {
                Dispatcher.ExitAllFrames();
                frame = new DispatcherFrame();
                Dispatcher.PushFrame(frame);
            }
            private void StopFrame()
            {
                frame.Continue = false;
            }
            public void run()
            {
                DataServicesFactory.Create("YourAppCode", OnDataServiceCreated);
                PushFrame();
                IRealtimeDataRequest req1 = realtime.SetupDataRequest()
                    .WithRic("JPY=")               
                    .WithFields(new string[2] { "BID", "ASK" })
                    .OnDataReceived(OnDataUpdate).CreateAndSend();
                PushFrame();
                IRealtimeDataRequest req2 = realtime.SetupDataRequest()
                     .WithRic("THB=")
                     .WithFields(new string[2] { "BID", "ASK" })
                     .OnDataReceived(OnDataUpdate).CreateAndSend();
                PushFrame();
                IRealtimeDataRequest req3 = realtime.SetupDataRequest()
                    .WithRic("CNY=")
                    .WithFields(new string[2] { "BID", "ASK" })
                    .OnDataReceived(OnDataUpdate).CreateAndSend();
                PushFrame();

            }
            public void OnDataServiceCreated(IDataServices dataservices)
            {
                Console.WriteLine("OnDataServiceCreated");
                realtime = dataservices.Realtime;
                StopFrame();     
            }


            private void OnDataUpdate(IRealtimeUpdateDictionary update)
            {
                Console.WriteLine("OnDataUpdate");
                foreach (var record in update)
                {
                    Console.WriteLine("#### OnDataUpdate RIC: {0} ####", record.Key);

                    foreach (var val in record.Value)
                    {
                        Console.WriteLine("{0} : {1}", val.Key, val.Value.Value.ToString());
                    }

                }
                Console.WriteLine("");
                StopFrame();
            }
        }

    The output looks like:

    OnDataServiceCreated
    OnDataUpdate
    #### OnDataUpdate RIC: JPY= ####
    BID : +104.12
    ASK : +104.16

    OnDataUpdate
    #### OnDataUpdate RIC: THB= ####
    BID : +30.41
    ASK : +30.42

    OnDataUpdate
    #### OnDataUpdate RIC: CNY= ####
    BID : +6.5860
    ASK : +6.5875
  • @gordon.konheiser

    Now I think I understand where you're coming from. Please correct me if I'm wrong, but I believe you got confused by the recommendation to do all data retrieval using Eikon .NET SDK on a single thread, which I'm guessing you interpreted as a recommendation to implement your entire application on a single thread. Retrieving data from Eikon on a single thread does not mean your application must be single threaded. It can be, if you'd like it. But it doesn't have to be. There's any number of ways to structure an application that retrieves data from Eikon using Eikon .NET SDK. You could for instance create a dedicated thread to house Eikon .NET SDK assemblies and continuously run the DispatcherFrame loop on that thread for as long as you need to retrieve data from Eikon.