Upgrade from Eikon -> Workspace. Learn about programming differences.

For a deeper look into our Eikon Data API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
65 3 2 8

DLL with DataAccess SDK C#

Hi there,
I am able to run the c# DataApiUsageExampleRealtimeData as a console application all right.

Now that I need the Eikon Data API within a DLL.I have referenced the "ThomsonReuters.Desktop.SDK.DataAccess.dll" and the other UDAP dll alright.

I cannot get any events to fire for

DataReceivedCallbackInit

after this code runs without any issues:

                subscription =
realtime.SetupDataSubscription()
                    .WithRics("EUR=")
                    .WithFields("BID", "ASK", "TIMACT")
                    .WithDateAndTimeMode(TimeAndDateMode.GMT)
                    .OnDataUpdated(DataReceivedCallbackInit)
                    .CreateAndStart();

I believe it has something to do with the threading model:

private static readonly DispatcherFrame Frame = new DispatcherFrame(); 

Any idea on how I can achieve this kind of threading within the DLL I am trying to code?
Do I need to put the above code into a new thread?

Thanks for support,

Michael

eikoneikon-data-apipythonrefinitiv-dataplatform-eikonworkspaceworkspace-data-apic#sdkmulti-threading
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hi @tt1057,

Thank you for your participation in the forum.

Is the reply below satisfactory in answering your question? If yes please click the 'Accept' text next to the most appropriate reply.

If you have already known an answer, please share your answer, and then accept it. This will guide all community members who have a similar question.

Otherwise please post again offering further insight into your question.

Thanks,

AHS

Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.

Thanks,

AHS

Upvotes
Accepted
39.4k 77 11 27

@tt1057
Please make sure that Windows message pump is running on the thread housing Eikon .NET API objects. See this thread for more details.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvote
65 3 2 8

I found a way how to do it. If anybody is interested, here you go:

private DispatcherFrame frame;

        /// <summary>
        /// 
        /// </summary>
        public Eikon()
            
        {
            
           new Thread(p => OnConnectInternal())
            {
                IsBackground = true
            }
            .Start(); 
        }
	private void OnConnectInternal()
        {
            frame = new DispatcherFrame();

            DataServices.Instance.StateChanged += Instance_StateChanged;

            DataServices.Instance.Initialize("DataApiUsageExampleRealtimeData2");

            var realtime = DataServices.Instance.Realtime;

            subscription =
                realtime.SetupDataSubscription()
                    .WithRics("EUR=")
                    .WithFields("BID", "ASK", "TIMACT")
                    .WithDateAndTimeMode(TimeAndDateMode.GMT)
                    .OnDataUpdated(DataReceivedCallbackInit)
                    .CreateAndStart();

            Dispatcher.PushFrame(frame);
        }       

        private void Instance_StateChanged(object sender, DataServicesStateChangedEventArgs e)
        {
            switch (e.State)
            {
                case DataServicesState.None:
                    break;
                case DataServicesState.Error:
                                break;
                case DataServicesState.Up:
            break;
                case DataServicesState.Down:
                    break;
                case DataServicesState.LocalMode:
                    break;
                case DataServicesState.EikonClosing:
            break;
                case DataServicesState.EikonStarting:
            break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }

        protected void DataReceivedCallbackInit(IRealtimeUpdateDictionary instruments)
        {
            
            try
            {
                foreach (var ins in instruments)
                {
                    foreach (var kvp in ins.Value)
                    {
                        switch (kvp.Key)
                        {
                            case "BID":
            break;
                            case "ASK":
            break;
                            default:
                                break;
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
            
            }
        }

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@tt1057, thanks for sharing :-)

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.