C#, Form.Timer interval value adjusting in a worker thread -


i want modify interval value of timer instance of system.microsoft.timer worker thread when change value in thread running worker thread, timer stopped.

let see source code

    private void scan_screen(object sender, eventargs e)     {         textbox1.text += "a";     }     private void button1_click(object sender, eventargs e)     {          g_receiver_timer = new system.windows.forms.timer();         g_receiver_timer.enabled = true;         g_receiver_timer.interval = timer_interval;         g_receiver_timer.tick += new eventhandler(scan_screen);     }      private void button2_click(object sender, eventargs e)     {         g_control_thread = new thread(new parameterizedthreadstart(control_message_receiver));         g_control_thread.start(200);      }     //thread function     public void control_message_receiver(object v)     {          g_receiver_timer.stop();         g_receiver_timer.interval = 200;         g_receiver_timer.enabled = true;         g_receiver_timer.tick += new eventhandler(scan_screen);     } 

why happening occurred? how can make run? (i want adjust interval value of timer in worker thread)

you need invoke control_message_receiver on ui thread since have spawned worker thread , accessing objects on ui thread context.

and don't need re-declare tick event on worker thread method.

look @ snippet below:

    private void scan_screen(object sender, eventargs e)     {         textbox1.text += "a";     }      private void button1_click(object sender, eventargs e)     {         g_receiver_timer = new system.windows.forms.timer();         g_receiver_timer.enabled = true;         g_receiver_timer.interval = 1000;         g_receiver_timer.tick += new eventhandler(scan_screen);     }      private void button2_click(object sender, eventargs e)     {         thread g_control_thread = new thread(new parameterizedthreadstart(control_message_receiver));         g_control_thread.start(1);     }      //thread function     public void control_message_receiver(object v)     {         //timer1.stop(); //why stop? -- remove instead         intervalchange((int)v); //call method , invoke on ui thread         g_receiver_timer.enabled = true;         //timer1.tick += new eventhandler(scan_screen); // -- remove     }      delegate void intervalchanger(int time);      void changeinterval(int time)     {         g_receiver_timer.interval = time;     }      void intervalchange(int time)     {         this.invoke(new intervalchanger(changeinterval), new object[] {time}); //invoke on ui thread     } 

Comments