如何在WinForms中创建一个线程?

时间:2009-08-21 06:58:19

标签: c# winforms multithreading

我需要帮助创建一个线程,C#winforms

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

public void Start() {
    MessageBox.Show("Thread Running");
}

我一直收到这条消息:

Cannot implicitly convert type 'void' to 'System.Threading.Thread

如何做msdn文档是不行的

3 个答案:

答案 0 :(得分:15)

这样可行:

Thread t = new Thread (new ThreadStart (Start));
t.Start();

这也可行:

new Thread (new ThreadStart(Start)).Start();

MSDN文档是正确的,但你做错了。 :) 你这样做:

Thread t = new Thread (new ThreadStart(Start)).Start();

所以,你在这里做的是尝试将Start()方法返回的对象(无效)分配给Thread对象;因此错误信息。

答案 1 :(得分:3)

.NET框架还提供了一个方便的线程类BackgroundWorker。这很好,因为你可以使用VisualEditor添加它并设置它的所有属性。

这是关于如何使用backgroundworker的一个很好的小教程(带有图像): http://dotnetperls.com/backgroundworker

答案 2 :(得分:2)

尝试将其拆分:

private void button1_Click(object sender, EventArgs e)
{
  // create instance of thread, and store it in the t-variable:
  Thread t = new Thread(new ThreadStart(Start));
  // start the thread using the t-variable:
  t.Start();
}

Thread.Start - 方法返回void(即没有),所以当你写

Thread t = something.Start();

您正尝试将Start - 方法的结果设置为t - 变量。这是不可能的,因此您必须将语句拆分为两行,如上所述。