我正在使用此代码:
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
我做错了什么?
答案 0 :(得分:6)
Thread
和ThreadStart
位于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