C# 将serialport变量设为全局变量,以便在线程中访问

C# 将serialport变量设为全局变量,以便在线程中访问,c#,C#,您能否帮助我将此串行设置为全局,以便不存在此错误:“串行”名称在当前上下文中不存在?一种方法是向调用该方法的MainWindow类添加一个方法,并将窗口实例传递给ThreadJob 即。 修改ThreadJob以接受实例作为参数: if (Convert.ToBoolean(Text)) { Console.WriteLine(Text); //serial.Write();

您能否帮助我将此串行设置为全局,以便不存在此错误:“串行”名称在当前上下文中不存在?

一种方法是向调用该方法的
MainWindow
类添加一个方法,并将窗口实例传递给
ThreadJob

即。 修改
ThreadJob
以接受实例作为参数:

if (Convert.ToBoolean(Text))
                {
                    Console.WriteLine(Text);
                    //serial.Write();
                }
将其放置在
main窗口中的某个位置:

public static void ThreadJob(MainWindow mainWindow)
修改
线程
创建以传递当前窗口实例:

public void WriteSerial(string text)
{
    serial.Write(text);
}
现在,在
Console.WriteLine(text)
之后,您应该能够编写:

Thread thread = new Thread(new ThreadStart(ThreadExample.ThreadJob(this)));

我还没有测试这个解决方案,所以它可能需要一些清理。这可能不是最好的方法,因为
serial
是窗口实例的一部分(您可以将它们分开)。

这里不清楚您想做什么,仅供参考-如果不使用互斥锁保护读/写,您无法同时从多个线程写入串行端口。是的。我的问题是,我怎样才能在没有任何错误的情况下调用序列号?因为每当代码进入if函数时,我都需要向串行端口发送一个字符。简单回答(可能错误):Move
SerialPort serial=new SerialPort()
公共
静态
类范围。所有SQLite等与基本串行端口测试有什么关系?会出现另一个问题:Threading中的非静态字段需要对象引用为什么要在单独的线程上写入sql?你到底想在这里完成什么?将
WriteSerial()
方法放进去似乎更干净,但将主窗口类传递给工作程序似乎很混乱。如果将所有感兴趣的位移动到worker
ThreadExample
并让MainWindow根据需要调用它(可能是回调),可能会更好。如果需要,
ThreadExample
中可能有一个内部工作线程……正如我前面提到的,您不能从多个线程读写串行端口。这就像捉鬼者——不要穿越溪流。类似这样的内容可能会让编译器满意,但您会带来更糟糕、更微妙的问题。@ebyrob:我同意,我会像您描述的那样编写。@asawyer:同意,我不确定这里线程的用途。很抱歉,我是新手,想尝试不同的东西。回到问题,我试着把线程放在我的主窗口中,效果很好。放入serial.Write()后,将出现错误。
Thread thread = new Thread(new ThreadStart(ThreadExample.ThreadJob(this)));
mainWindow.SerialWrite(text);