您的位置:首页 > 编程语言 > C#

C#WinForm实现线程的启动、挂起、恢复、终止操作

2020-02-02 10:23 771 查看
public partial class Form1 : Form
{
Thread t = null;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(Run));
t.Start();
}

public  void Run()
{
for (int i = 1; i < 20000; i++)
{
this.Invoke(new Action(
() => {
this.richTextBox1.Text = "第" + i + "条记录同步完成";
this.progressBar1.Value = i / 200;
this.label2.Text = i / 200 + "%";
}
));

Thread.Sleep(10);
}
}

private void button2_Click(object sender, EventArgs e)
{
Thread.Sleep(5000);

}

private void button3_Click(object sender, EventArgs e)
{
if (t.ThreadState!=ThreadState.Suspended)
{
t.Suspend();
}

}

private void button4_Click(object sender, EventArgs e)
{
if (t.ThreadState == ThreadState.Suspended)
{
t.Resume();
}
}

private void button5_Click(object sender, EventArgs e)
{
t.Abort();
}
string str = "";
private void button6_Click(object sender, EventArgs e)
{
t = new Thread(new ParameterizedThreadStart(RunB));
A a = new A() { X = this.textBox1.Text, Y = this.textBox3.Text };
t.Start(a);//启动线程
}

public void Run1()
{
str = "[" + this.textBox1.Text + "]";
for (int i = 1; i < 20000; i++)
{
this.Invoke(new Action(
() => {
this.richTextBox1.Text = str+"第" + i + "条记录同步完成";
this.progressBar1.Value = i / 200;
this.label2.Text = i / 200 + "%";
}
));

Thread.Sleep(10);
}
}

private void RunB(object a)
{
for (int i = 1; i < 20000; i++)
{
// Invoke (委托 )
// Action ( lambda )

// Invoke ( new Action (   ()=>{}   ));

this.Invoke(new Action(
() => {
this.richTextBox1.Text = ((A)a).X + "第" + i + "条记录同步完成" + ((A)a).Y;
this.progressBar1.Value = i / 200;

this.label2.Text = i / 200 + "%";
}
));
Thread.Sleep(10);
}
}

private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;

}

class A
{
public string X { get; set; }
public string Y { get; set; }
}
}
  • 点赞 2
  • 收藏
  • 分享
  • 文章举报
坠梦者 发布了32 篇原创文章 · 获赞 58 · 访问量 1557 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: