C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它

Posted fxyc87

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它相关的知识,希望对你有一定的参考价值。

C# 委托 / 跨线程访问UI /  线程间操作无效: 从不是创建控件“Form1”的线程访问它  

网上的代码都比较复杂,还是这个简单

见代码,

 

简易解决办法:

 

主窗体代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			Thread func = new Thread(lib.test_func);
			func.Start(this);
		}
	}
}

  

线程代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApp1
{
	public static class lib
	{
		public static void test_func(object frm)
		{
			var frm2 = frm as Form1;
			while (true)
			{
				System.Threading.Thread.Sleep(100);
				frm2.Invoke(new Action(() => {
					frm2.Text = DateTime.Now.ToString();
				}));

			}
		}

	}
}

  

以上是关于C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform 跨线程更新UI控件常用方法汇总

C# Winform 跨线程更新UI控件常用方法总结(转)

c#如何跨线程调用窗体控件

使用委托进行跨线程处理的 C# 问题

实现Winform 跨线程安全访问UI控件

c# 跨线程访问窗体UI