C#中的线程产生错误

时间:2010-06-13 17:27:49

标签: c# multithreading

我正在使用此代码:

private void Form1_Load(object sender, EventArgs e)
{

}

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string response = serialPort1.ReadLine();
    this.BeginInvoke(new MethodInvoker(
        () => textBox1.AppendText(response + "\r\n")
    ));
}

ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();

但是我遇到了很多错误:

  

错误2找不到类型或命名空间名称“ThreadStart”   (您是否缺少using指令或程序集引用?)   C:\ Users \用户alexluvsdanielle \应用程序数据\本地\临时   Projects \ WindowsFormsApplication1 \ Form1.cs 31 44   WindowsFormsApplication1

     

错误3当前上下文中不存在名称“ThreadWork”   C:\ Users \用户alexluvsdanielle \应用程序数据\本地\临时   Projects \ WindowsFormsApplication1 \ Form1.cs 31 56   WindowsFormsApplication1

     

错误4找不到类型或命名空间名称'Thread'(是   你错过了using指令或程序集引用?)   C:\ Users \用户alexluvsdanielle \应用程序数据\本地\临时   Projects \ WindowsFormsApplication1 \ Form1.cs 32 31   WindowsFormsApplication1

     

错误5字段初始值设定项无法引用非静态字段,   方法或属性'WindowsFormsApplication1.Form1.myThreadDelegate'   C:\ Users \用户alexluvsdanielle \应用程序数据\本地\临时   Projects \ WindowsFormsApplication1 \ Form1.cs 32 38   WindowsFormsApplication1

我做错了什么?

6 个答案:

答案 0 :(得分:6)

ThreadThreadStart位于System.Threading MSDN page

using System.Threading;添加到代码顶部的命名空间中。

ThreadWork不是.NET中定义的类。我找到了一个MSDN页面here,它在示例代码中使用了它。因此,您需要将其替换为您已定义DoWork方法的类的名称。如果它与此代码在同一个类中,那么您只需要传递DoWork

答案 1 :(得分:6)

也许我在这里提到了明显的流血,但是从代码示例中,你的代码块:

ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();

不在方法中。我以前做过这个。

一旦你解决了这个问题,其他答案显然会适用。

答案 2 :(得分:2)

代码文件中缺少using System.Threading

答案 3 :(得分:2)

其他人已经解决了这个特殊问题,但真正回答“我做错了什么?”是(IMO)“你没有阅读错误信息。”出于某种原因出现错误消息:提示告诉您哪里出错了。

您有以下几条错误消息:

  

类型或命名空间名称' Fpp '   无法找到(你错过了吗?   使用指令或程序集   引用?)

错误消息在这里给出了一个提示:它找不到类型,但可能是因为您没有正确的引用或using指令。因此,请检查您的参考文献,并检查您的using指令。在这种情况下,Thread位于mscorlib中,因此您不太可能遇到程序集引用问题 - 因此接下来要检查的是using指令。它位于System.Threading命名空间中,因此您需要

using System.Threading;

在顶部 - 或者你当然可以在任何地方指定System.Threading.Thread,但这有点啰嗦。

仔细阅读错误信息通常意味着你不需要问你做错了什么:他们会像在这里一样告诉你。

ThreadWork错误的修复更难确定 - 你应该使用你想要在新线程中执行的任何方法...假设你真的想自己开始一个新线程。你确定你真的这么做吗?

答案 4 :(得分:1)

开始时请确保您有

using System.Threading;

位于文件顶部。

此外 - 您无法在方法外拨打myThread.Start();

答案 5 :(得分:1)

您应该将以下代码放在C#代码文件的顶部:
using System.Threading