System.Windows.Forms.Timer 只能运行在UI线程

1.非UI线程执行启动定时器无效

private void Form1_Load(object sender, EventArgs e)
        {
            // 允许跨线程访问控件
            Control.CheckForIllegalCrossThreadCalls = false;

            Task.Run(() =>
            {
                usbListen();
            });
        }

private void usbListen()
        {
            checkUSBTimer = new Timer();
            checkUSBTimer.Interval = 5 * 1000;
            checkUSBTimer.Enabled = true;
            checkUSBTimer.Tick += new EventHandler(startCheckUSB);
            checkUSBTimer.Start();

        }
public void startCheckUSB(object sender, EventArgs e)
        {

            WriteToTextBox("日志打印");
        }

2.转到UI线程启动定时器有效

修改usbListen()函数代码

private void usbListen()
        {
            BeginInvoke(new MethodInvoker(delegate
            {
                checkUSBTimer = new Timer();
                checkUSBTimer.Interval = 5 * 1000;
                checkUSBTimer.Enabled = true;
                checkUSBTimer.Tick += new EventHandler(startCheckUSB);
                checkUSBTimer.Start();
            }));

        }

你可能感兴趣的:(Winfrom,ui,winform,定时器,UI线程,非UI线程访问控件)