【问题标题】:How to create a thread in WinForms?如何在 WinForms 中创建线程?
【发布时间】:2009-08-21 06:58:19
【问题描述】:

我在创建线程方面需要帮助,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文档怎么办是不行的

【问题讨论】:

    标签: c# winforms multithreading


    【解决方案1】:

    这可行:

    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 对象;因此出现错误消息。

    【讨论】:

    • 特别是MSDN文档指出Start()的返回类型是void...
    【解决方案2】:

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

    这是一个关于如何使用 backgroundworker 的不错的小教程(带图片): http://dotnetperls.com/backgroundworker

    【讨论】:

    • 我不得不支持这个建议。 BackgroundWorker 方法比使用 Thread 对初学者更友好。它还可以帮助您在 UI 线程和工作线程之间编组数据。
    【解决方案3】:

    尝试这样拆分:

    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-变量。这是不可能的,因此您必须按照上面的说明将语句分成两行。

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 2010-10-05
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多