c# - Timer runs in different thread than the one that created it -


using visual studio 2015, visual c# windows application.

i need timer empties queue in main thread because ui components modified. coded this:

    public form1()     {         initializecomponent();         q = new concurrentqueue<amsg>();         timer = new system.timers.timer(100);         timer.elapsed += timer_elapsed;         timer.enabled = true;     }      void timer_elapsed(object sender, system.timers.elapsedeventargs e)     {         clsudpmsg msg;         while (q.trydequeue(out msg)) handlerx(msg);     } 

but elapsed event executes in worker thread...?

if put timer on main form @ design time generated prototype different:

    private void timer1_tick(object sender, eventargs e)     {         amsg msg;         while (q.trydequeue(out msg)) handlerx(msg);     } 

but 1 execute in main thread context.

the question extends thread creates timer way; thought timer created in thread executes elapsed event in same thread context. missing something?

quick edit: see these different timers, system.timers.timer , windows.forms.timer. - how reliably create timers execute in thread create them?

yeah, you're dealing 2 separate timer classes. system.windows.forms.timer fires tick event on main thread , system.timers.timer fires elapsed event on background thread. advantage of system.windows.forms.timer hides threading; advantage of system.timers.timer doesn't require message pump work.

you ask, "how reliably create timers execute in thread create them?" well, easy when have windows forms gui , starting timer on ui thread: use system.windows.forms.timer. if don't have message pump take advantage of, have use system.timers.timer , way run on main thread when timer fires elapsed event recreate message loop in main thread--have sit, maybe waiting monitor.pulse or other kind of notification timer thread. means main thread won't getting useful done in meantime...


Comments

Popular posts from this blog

multithreading - Exception in Application constructor -

React Native allow user to reorder elements in a scrollview list -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -