如何在私有静态void函数中使用字符串值设置WinForm文本属性



我正在尝试将一些第三方C#示例代码合并到我的程序中。第三方代码是WinForms NET 4.6.2应用程序的一部分,该应用程序扫描COM端口上的设备。

在我的例子中,我想在方法private static void PortStatusCallback()中插入一行(或两行(代码。我添加的代码旨在用PortStatusCallback()中的一些变量值填充Form1上的一些文本框。完整的方法如下;我建议添加的是单线CCD_ 3。此添加返回错误消息非静态字段、方法或属性"Form1.myPortname"需要对象引用

有人能建议一种从静态方法访问字段的方法吗?我是C#编程的新手,所以如果你能帮我写下代码,我将不胜感激。谢谢。

private DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback);  // Allocated to prevent garbage collection
private static void PortStatusCallback([MarshalAs(UnmanagedType.LPStr)] String portname, DLL.PortStatusTypes status, byte curScanAdr, byte maxScanAdr, byte foundType)
{
string statusMsg = "rnPortInfo Callback: " + portname + " status:" + status.ToString() + " curScanAdr:" + curScanAdr.ToString() + " maxScanAdr:" + maxScanAdr.ToString() + " foundType:" + foundType.ToString("X2");
myPortname.Text = portname; // this line is added by me and throws up a CS0120 error.
MyStatusBox.Invoke((MethodInvoker)delegate () { MyStatusBox.AppendText(statusMsg); });
Console.Write(statusMsg);
}

这个答案假设Form1类代表应用程序的主窗体;类的一个实例是在Program.cs中创建的,从未创建过其他实例,当您关闭窗体时,应用程序就会消失(即典型的WinForms应用程序(。

创建半私有财产:

public static Form1 CurrentForm { get; private set; }

在Form1构造函数(或Load处理程序(中,执行以下操作:

CurrentForm = this;

现在,表达式Form1.CurrentForm将解析为您的主窗体(从应用程序中的任何位置(。

最后,将出现错误的行更改为:

CurrentForm.myPortname.Text = portname;

尝试使用如下静态修饰符:

private static DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback);  // Allocated to prevent garbage collection

最新更新