从 FileSystemWatcher 创建 child window

Create a child window from a FileSystemWatcher

我有一个 FileSystemWatcher 监视新创建的文件。

当它看到一个时,我希望它打开一个child window。

使用这个:

private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
    TableWindow win = new TableWindow();
    win.Owner = this;
    win.Text = "xxx";
    win.ShowInTaskbar = false;
    win.Show();
}

我得到的错误是:

Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on

谷歌搜索后。我最终得到了这个

TableWindow win = new TableWindow();
win.Owner = this;
win.Text = "xxx";
win.ShowInTaskbar = false;
win.Invoke((MethodInvoker)delegate
{
    win.Show();
});

这给了我一个不同的错误:

Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

场景如下。在游戏中,每次打开新的 table 时,都会创建一个新文件。创建该文件后,我想打开一个 child window 以显示有关该 table.

的统计信息

这可能吗?

我过去使用 InvokeRequired 时所做的是将它放在一个 if 语句中,如果它没有,它将调用 UI 线程上的方法'未从 UI 线程调用。

private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
    ShowWindow();
}

private void ShowWindow()
{
    if (this.InvokeRequired)
    {
        var del = new MethodInvoker(ShowWindow);
        this.BeginInvoke(del);
        return;
    }
    TableWindow win = new TableWindow();
    win.Owner = this;
    win.Text = "xxx";
    win.ShowInTaskbar = false;
    win.Show();
}