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

8

我需要帮助创建一个 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个回答

18

这个可以正常工作:

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()方法返回的对象(该方法为void)分配给Thread对象;因此出现错误消息。

2
特别是,MSDN文档指出Start()的返回类型为void... - Jon Skeet

4

2
我必须赞同这个建议。使用BackgroundWorker方法比使用Thread更适合初学者。它还可以帮助你在UI线程和工作线程之间传输数据。 - Allon Guralnek

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();

您正在尝试将返回类型为void的Start方法的结果设置为变量t。这是不可能的,因此您必须按照上面指定的方式将语句拆分成两行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接