我需要一個自定義事件,如果找到/創建了特定目錄中的新/現有文件,應該引發該事件。要檢查是否創建了新的文件,我使用SystemFileWatcher,它工作正常。爲了檢查程序啓動時是否存在某些文件,我寫了一些行並且適用於。如何正確提高自定義事件?
我使用這個類的事件參數:
public class FileDetectEventArgs : EventArgs
{
public String Source { get; set; }
public String Destination { get; set; }
public String FullName { get; set; }
public FileDetectEventArgs(String source, String destination, String fullName)
{
this.Source = source;
this.Destination = destination;
this.FullName = fullName;
}
}
如果SystemFileWatcher養FileCreated事件我用幾行代碼:
public void onFileCreated(object sender, FileSystemEventArgs e)
{
// check if file exist
if (File.Exists(e.FullPath))
{
OnNewFileDetect(new FileDetectEventArgs(source, destination, e.FullPath));
}
}
如果文件存在,我儘量擡高事件以這種方式:
public void checkExistingFiles(String source, String filter)
{
DirectoryInfo di = new DirectoryInfo(source);
FileInfo[] fileInfos = di.GetFiles();
String fileFilter = filter.Substring(filter.LastIndexOf('.'));
foreach (FileInfo fi in fileInfos)
{
if (fi.Extension.Equals(fileFilter))
{
OnNewFileDetect(new FileDetectEventArgs(source, destination, fi.FullName));
}
}
}
這裏是OnNewFileDetect-事件:
protected void OnNewFileDetect(FileDetectEventArgs e)
{
if (OnNewFileDetectEvent != null)
{
OnNewFileDetectEvent(this, e);
}
}
問題是,如果onFileCreated-Event引發我的OnNewFileDetect事件一切正常。但是,如果checkExistingFiles找到了一些現有文件並嘗試引發OnNewFileDetect-Event,則不會發生任何事情。我發現OnNewFileDetectEvent-Object是null,所以什麼都沒有發生。但是,如果onFileCreated-Event被觸發,爲什麼它不是null?
謝謝你的快速回答。 現在我得到的錯誤:委託「FileDetecedEvent」不帶兩個參數 – thomas 2012-04-10 23:57:01
@thomas你的事件是如何聲明的? – 2012-04-11 01:54:08
public delegate void FileDetectEvent(object sender,FileDetectedEventArgs e); @Reed Copsey – thomas 2012-04-11 07:45:07