簡體   English   中英

無法第二次調用表單中的更改

[英]Cannot invoke changes in form a second time

我嘗試編寫一個應用程序,我需要通過 COM 端口使用掃描儀。 我為此使用了啟用的 SerialPort object,在主窗體中掃描工作正常。

然后我使用一個按鈕來切換主窗體是否應該能夠執行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 是一個 ComboBox)(System.IO.Ports.SerialPort)

在我的主窗體中,我使用它來創建一個新窗體:

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

然后表格按預期顯示。 第一次嘗試以新形式掃描內容時,一切正常。

然后我關閉“子”表單。

然后我重新打開它並顯示它並觸發掃描儀事件。

這是我的構造函數:

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

在我的事件中,我嘗試調用 combobox 中的更改。

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

在我的第二次嘗試中,表單未創建 (IsCreated = false) 並且沒有句柄 (IsHandleCreated = false),盡管它是可見的並且對掃描儀有反應。

我無法繞過它。 我也嘗試using表單在使用后將其處理掉,但它不起作用。

有人猜到了嗎?

我解決了。
它很丑陋,但它有效。
我希望未來的我會有一個很好的解決方案。
解決辦法:通過scanner.Close scanner.Close()關閉SerialPort object,用另一種形式打開。
掃描完所有內容后,關閉Form2_FormClosing(object sender, FormClosingEventArgs e)上的 object。

我仔細閱讀了您的帖子和代碼。 據我了解, 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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM