winforms 无法再次调用表单中的更改

p4tfgftt  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(166)

我试着写一个应用程序,我需要通过COM端口使用扫描仪。我为它使用了一个启用的SerialPort对象,扫描在主窗体中工作正常。
然后,我使用一个按钮来切换主窗体是否能够执行ReadExisting()方法。

private void ScannerDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
try
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();`
    if (string.IsNullOrEmpty(indata))
    {
        return;
    }
    Invoke(new MethodInvoker(delegate { cbValues.SelectedItem = values; }));
}
    catch (Exception ex)
    {
        log.Error($"{ex}");
    }
}

(cbValues是一个组合框)(系统.IO.端口.串行端口)
在我的主窗体中,我使用此命令创建一个新窗体:

var form = new Form2(_data, scanner);
form.ShowDialog();

然后表单按预期显示。第一次尝试时,当我在新表单中扫描东西时,一切正常。
然后关闭“child”窗体。
然后我重新打开它,它被显示出来,scanner事件被触发。
这是我的构造函数:

InitializeComponent();
HandleCreated += new EventHandler((sender, args) =>
{
    scanner.DataReceived += new SerialDataReceivedEventHandler(ScannerDataReceivedHandler);
});

在我的事件中,我尝试调用组合框中的更改。

BeginInvoke(new MethodInvoker(delegate { cbValues.SelectedItem = values; }));

在我第二次尝试时,表单没有创建(IsCreated = false),也没有句柄(IsHandleCreated = false),尽管它是可见的,并且对扫描程序有React。
我不能完全理解它,我也尝试过using这个表单来在使用后处理它,但是它不起作用。
有人猜到了吗?

okxuctiv

okxuctiv1#

我仔细阅读了你的帖子和代码。据我所知,scannerMainForm的成员变量,你将它作为参数传递给Form2构造函数。不仅仅是猜测,我看到的是一种迂回的方式,订阅事件,一旦scanner示例化,* 应该 * 在主表单 * 中 * 附加 * 一次。

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        scanner = new Scanner();
        scanner.DataReceived += ScannerDataReceivedHandler;
    }
    // F O R    E X A M P L E
    // The class name `Scanner` is just a placeholder for this example.
    // The point is, it's being declared/instantiated "somewhere".
    private readonly Scanner scanner;
    private void ScannerDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        // Do something
    }
}
8iwquhpp

8iwquhpp2#

我解决了。
它很丑,但很有效。
我希望未来的我会有一个很好的解决方案。
解决方案:通过scanner.Close()关闭SerialPort对象并以另一种形式打开它。
扫描完所有内容后,关闭Form2_FormClosing(object sender, FormClosingEventArgs e)上的对象。

相关问题