使用线程实时跨线程输出打印到TextBox中。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp20
{
delegate void delegateSetText(string str);//定义一个委托
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void print(string a)
{
textBox3.Text = a;
}
public void output(object num)
{
for (int i = 0; i < (int)num; i++)
{
Thread.Sleep(10);
if (InvokeRequired)//判断是否是被其他线程调用
{
//方法1 使用匿名方法的方式
delegateSetText delegatesetText01 = delegate (string str01) { textBox3.Text = str01; };
//使用正常委托的方式,需要再写一个方法
//delegateSetText delegatesetText01 = print;
//不需要跨线程的两种方式
//delegatesetText01(i.ToString());
//delegatesetText01.Invoke(i.ToString());
//需要跨线程
Invoke(delegatesetText01, new object[] { i.ToString() });
//方法2 Action方式
//Action<string> action = print;
//Invoke(action, new object[] { i.ToString() });
}
else
textBox3.Text = i.ToString();
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ParameterizedThreadStart(output));
thread.Start(1000);
}
}
}