FileSystemWatcher和OnChange方法触发Form方法

时间:2020-04-07 12:28:53

标签: c# winforms filesystemwatcher

我维护Windows窗体应用程序,该程序有助于准备一些文件。这些文件之一在Notepad ++中更容易编辑,这就是为什么用户希望可以在提到的程序中进行编辑的原因。我想拥有一种逻辑,一旦将在外部程序中对其进行编辑,它将可以从该特定文件中重新加载数据。我在互联网上发现FileSystemWatcher对我可能有用,这就是为什么我创建了定义FileSystemWatcher并开始寻找更改的按钮的原因:

private void btnNotepadPP_Click(object sender, EventArgs e)
{
    ......
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = Path.GetDirectoryName(OtherFileName);
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "FILE.xml";

    watcher.Changed += OnChanged;

    watcher.EnableRaisingEvents = true;
    ......
}

在这里,我定义了OnChanged

private static void OnChanged(object source, FileSystemEventArgs e)
{
    MessageBox.Show("Edited!");

    //What I wanted to do
    ReloadFormSilently(); // -> Main Form method
}

这是我的问题,ReloadFormSilently()中看不到OnChanged。那可能很明显,但是我找不到解决方法。我知道我缺少对Main Form的一些引用,但是我不知道如何传递此引用。我什至考虑过要重载OnChanged,但是很快我意识到我不知道该怎么做。我将很高兴为您提供一些解决该问题的建议。也许有更简单的方法? 在此先感谢:)

1 个答案:

答案 0 :(得分:0)

非常感谢 @ Zer0 -解决方案很简单:

private void OnChanged(object source, FileSystemEventArgs e)
{
    MessageBox.Show("Edited!");

    //What I wanted to do
    ReloadFormSilently(); // -> Main Form method
}

static引起了问题。干杯!