c# Form1_Load下同时运行两个线程,两个线程中textBox1.Text和textBox2.Text循环文本框不停的互换信息
时间: 2024-10-15 12:27:47 浏览: 28
在 C# 中,要在 `Form1_Load` 下同时启动两个线程并让 textBox1 和 textBox2 的文本不停地互相交换,你可以创建一个新的类,比如说 `TextSwitcher`,专门负责线程间的通信。这里是一个简单的示例:
```csharp
using System;
using System.Threading;
using System.Windows.Forms;
public partial class Form1 : Form
{
private TextSwitcher textSwitcher;
private Thread thread1;
private Thread thread2;
public Form1()
{
InitializeComponent();
InitializeThreads();
}
private void InitializeThreads()
{
// 创建两个线程对象,并设置它们的WorkerReportsProgress属性为true以便于进度报告
textSwitcher = new TextSwitcher(textBox1, textBox2);
thread1 = new Thread(() => textSwitcher.SwitchText(0)); // 线程1负责交替写入textBox1
thread2 = new Thread(() => textSwitcher.SwitchText(1)); // 线程2负责交替写入textBox2
// 设置线程为后台线程,防止阻塞UI
thread1.IsBackground = true;
thread2.IsBackground = true;
// 启动两个线程
thread1.Start();
thread2.Start();
}
}
// 创建一个TextSwitcher类用于处理线程间的数据交换
class TextSwitcher
{
private TextBox textBox1;
private TextBox textBox2;
private int currentTextBox;
public TextSwitcher(TextBox textBox1, TextBox textBox2)
{
this.textBox1 = textBox1;
this.textBox2 = textBox2;
}
public void SwitchText(int index)
{
while (true) // 循环不断切换文本
{
textBox1.Invoke((Action)(() =>
{
// 使用Invoke确保UI更新在主线程上安全
textBox1.Text = currentTextBox == 0 ? "这是textBox1的信息" : "这是textBox2的信息";
}));
if (index != currentTextBox) // 切换到另一个文本框
{
currentTextBox = index;
}
else // 如果已经轮回到当前文本框,则等待一段时间再切换
{
System.Threading.Thread.Sleep(500); // 每隔半秒切换一次
}
}
}
}
```
阅读全文