Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileSystemWatcher触发两次(已知错误/功能)可能的解决方法无效_C#_Winforms_Timer_Filesystemwatcher - Fatal编程技术网

C# FileSystemWatcher触发两次(已知错误/功能)可能的解决方法无效

C# FileSystemWatcher触发两次(已知错误/功能)可能的解决方法无效,c#,winforms,timer,filesystemwatcher,C#,Winforms,Timer,Filesystemwatcher,我在这个问题上发现了很多,并且发现: 这是为了解决问题,但它仍然为我发射了两次 我正试图在Windows窗体中执行此操作,因此我不知道这是否会改变任何内容,我得到的是: private void Form1_Load(object sender, EventArgs e) { fileSystemWatcher1.Path = TestFolder; fileSystemWatcher1.Filter = "*.txt"; fil

我在这个问题上发现了很多,并且发现:

这是为了解决问题,但它仍然为我发射了两次

我正试图在Windows窗体中执行此操作,因此我不知道这是否会改变任何内容,我得到的是:

    private void Form1_Load(object sender, EventArgs e)
    {

        fileSystemWatcher1.Path = TestFolder;
        fileSystemWatcher1.Filter = "*.txt";
        fileSystemWatcher1.Created += fileSystemWatcher1_Created;
        fileSystemWatcher1.EnableRaisingEvents = true;
    }


    void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
    {
        FileInfo objFileInfo = new FileInfo(e.FullPath);
        if (!objFileInfo.Exists) return;
        MessageBox.Show(@"Test Message");
    }
我还发现了一些使用计时器和线程的方法,我宁愿避免使用它们,因为它们似乎对我认为不需要的东西很长,而且我的最终程序需要尽可能快

它最终触发的东西可以在一个单独的类中,所以我可以在那里放置任何东西,使它在半秒钟内只触发一次,我想这都是可行的

编辑:

这感觉像是一个廉价的工作,但我正在做:

    public void Alert()
    {
        QueueCount++;
        if (QueueCount % 2 == 0)
        {
            MessageBox.Show(@"pie");
        }
    }

这是可行的,但我真的想要一个防傻子的方法,就像Sriram Sakthivel说的,它不会对他们触发两次,所以如果我给人们一半的时间,如果它只对他们触发一次,它就不会起作用

您确定发布的代码触发事件两次吗?我无法复制它。我知道众所周知,
FileSystemWatcher
会造成多次通知的麻烦,但现在不是这样(Atlese for me)。是的,每当我在指定文件夹中放入新的txt文件时,都会出现两个消息框。这种情况发生在右键单击创建一个.txt文件,然后复制/拖动其中一个文件时。我也刚刚做了一个新的项目,只有我在这里发布的内容,它仍然会触发两次:在项目的其他地方,是否还有其他原因会导致这种情况。这是一个非常常见的神话,认为第二次通知有“特殊”之处。这并不意味着什么,还有很多。您真正想知道的是程序是否“完成”了文件的编写。在打开文件之前无法找到,必须使用FileShare.None才能确定。这几乎保证了第一次失败。你不知道什么时候会成功,需要反复尝试。并且不要假设记事本使用的文件访问模式是典型的。事实并非如此。