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

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -