首页 > 解决方案 > FileSystemWatcher 并从 OnChange 方法触发 Form 方法

问题描述

我维护有助于准备一些文件的 Windows 窗体应用程序。其中一个文件在 Notepad++ 中更容易编辑,这就是为什么用户希望在上述程序中编辑该文件的原因。我想要有一个逻辑,一旦它在外部程序中被编辑,它就会从那个特定的文件重新加载数据。我在 Internet 上发现这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,但很快我意识到我不知道该怎么做。我将不胜感激一些如何解决这个问题的建议。或者也许有更简单的方法?提前致谢 :)

标签: c#winformsfilesystemwatcher

解决方案


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

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

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

static使问题。干杯!


推荐阅读