【问题标题】:Error: Cannot implicitly convert type 'void' to 'System.Threading.Thread' [duplicate]错误:无法将类型“void”隐式转换为“System.Threading.Thread”[重复]
【发布时间】:2017-12-25 02:52:03
【问题描述】:

下面的代码演示了两种创建线程的方法,该线程执行相同的工作,但只有一种有效,另一种无效。据我所知,不同之处在于声明了一个变量 - 有人可以帮助解释为什么这会导致Error: Cannot implicitly convert type 'void' to 'System.Threading.Thread'

public MainWindow()
{
    InitializeComponent();

    // Runs OK
    new Thread(() => { MessageBox.Show("foo");}).Start();

    // Error: Cannot implicitly convert type 'void' to 'System.Threading.Thread'
    Thread t = new Thread(() =>  { MessageBox.Show("foo”); }).Start();
}

【问题讨论】:

  • Start 返回 void 并且您正在尝试将其分配给线程
  • 注意编译器消息。它们很有用。一条消息说它不能将一种类型转换为另一种类型,这表明在某种赋值中,具有一种类型的表达式不能转换为赋值目标所需的类型。在您的情况下,您尝试将方法的返回值分配给变量,而该方法甚至不返回值。如果您在网站上搜索该错误消息,您会发现少数问答的标记重复项,其中包含大量信息供您自己理解错误消息

标签: c# wpf multithreading


【解决方案1】:

.Start() 返回void。您将调用.Start() 的结果分配给Thread t,而不是分配线程本身。

你应该这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2016-02-17
    • 2015-04-26
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多