我在 Visual Studio 2010 中使用 C# 和 Winforms
我有一个程序,我试图通过串行端口读取输出并将其打印到屏幕上。它最初是作为一个控制台程序开始的,但现在已经发展到我们希望将输出放在表单上的字段中。我有代码可以解析出我正在寻找的输出的串行端口写入和工作,我只需将 Console.WriteLine 更改为 label.text = "";,基本上。我已将侦听串行端口的函数合并到 GUI 代码中,因此所有内容都在同一个文件中。
不过,我对如何让函数写入标签感到困惑。它是静态的,所以我不能只说'label.text ='。我尝试在要使用的函数内创建一个新的表单对象,这允许我访问表单上的控件,但不会更新我在运行时看到的表单(我猜是因为我创建了表单的新实例而不是访问现有实例?)
我还需要让串行侦听器与 GUI 同时运行,因此 GUI 标签将更新为接近实时运行该函数所获得的结果,因此我尝试将其设置为线程化,GUI 是由 main() 启动的一个线程,而串行侦听器是另一个线程,当我单击按钮启动它时启动它。但是,我遇到了同样的问题,无法访问串行侦听器线程中的标签,因为它必须是静态的才能使用 system.threading 进行初始化。
我在想也许我需要为串行侦听器使用后台工作人员,但我对这些的经验绝对为零。后台工作人员能否实时更新 GUI 上的标签?
我不能发布特定的代码,但继承人的一般想法:
Main() 启动 GUIthread
GUI 具有启动串行侦听器的按钮 OnClick 按钮启动 ListenerThread ListenerThread 输出到控制台,希望输出到表单标签
无法访问 GUI.Label,因为侦听器是静态的,无需线程化 在侦听器中创建新的 GUI 实例允许我调用该实例的控件,但它们不会在运行时更新 GUI
确保标签是公开的。