c#使用FileSystemWatcher的一些坑

1.1依賴引用:

using system.IO

1.2基礎(chǔ)代碼(example):

//這個模塊可以在onLoad里實(shí)現(xiàn)
FileSystemWatcher WatcherDemo = new FileSystemWatcher();
WatcherDemo.Path = ""  
xmlWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess;
//以上為監(jiān)控的要素,還有其他,可以自己根據(jù)提示看一下

xmlWatcher.Created += new FileSystemEventHandler(this.fileChangedAction);
//fileChangedAction是一個監(jiān)控到文件發(fā)生改變后自定義的事件,在本文1.3中實(shí)現(xiàn)
xmlWatcher.Changed += new FileSystemEventHandler(this.fileChangedAction);


xmlWatcher.EnableRaisingEvents = true; 

//一個線程只能監(jiān)控一個文件夾
//但可以監(jiān)控文件夾和子文件夾,所以這是一個實(shí)現(xiàn)多文件夾監(jiān)控的思路
//要么重開新線程

1.3攔截到符合條件的動作后的函數(shù)

string lastModify = "";  //設(shè)置了一個全局開關(guān),因?yàn)槲募O(jiān)控事件會出現(xiàn)兩次事件

public void fileChangedAction(object source,FileSystemEventArgs e) {
            string nowModify = DateTime.Now.ToLongTimeString();
            
            if (nowModify != lastModify)
            {
                richTextBox1.AppendText("發(fā)生變化了" + DateTime.Now.ToLongTimeString() + "\n");
                //以上部分要生效,設(shè)計跨線程調(diào)用,在本文的1.4設(shè)置
                ReadXmlAndSaveToMongo useObject = new ReadXmlAndSaveToMongo();
                //這是一個自定義的類,實(shí)現(xiàn)需要的操作
                try
                {
                    useObject.ReadXml();
                }
                catch { 

                }
                
                lastModify = nowModify;
            }
            else {
                lastModify = nowModify;
            }

        }

1.4 跨線程調(diào)用開關(guān)

public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;    //允許跨線程調(diào)用
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容