2012-04-11 4 views
2

Я написал следующий код.FileSystemWatcher не вызывал событие изменения

[XmlRoot("myxml")] 
public class myxml 
{ 
    [XmlElement("one")] 
    public string one { get; set; } 
    [XmlElement("two")] 
    public string two { get; set; } 
} 
class Program 
{ 
    private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
     // Specify what is done when a file is changed, created, or deleted. 
     Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); 
    } 

    // 

    static void Main(string[] args) 
    { 
     myxml m = new myxml(); 
     m.one = "111"; 
     m.two = "222"; 
     FileSystemWatcher watcher = new FileSystemWatcher(@"c:\", "myxml.xml"); 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 
     FileStream fs = new FileStream(@"c:\myxml.xml", FileMode.Open); 
     XmlSerializer x = new XmlSerializer(m.GetType()); 
     x.Serialize(fs, m); 
     fs.Close(); 



    } 
} 

теперь я думал, что после того, как в следующей строке OnChanged событие вызывается, но нет ...

x.Serialize(fs, m); 

также после того, как эта линия ничего не произошло

fs.Close(); 

любая идея?

ответ

3

Вы должны установить EnableRaisingEvents в значение true, чтобы начать сбор событий.

+0

Спасибо, а после ведьмы он поднимет? after'x.Serialize (fs, m); 'или после' fs.Close(); ' – MoShe

+0

Я не знаю, будет ли Serialize очищать буфер ввода-вывода, но, разумеется, Close будет делать. Однако, используя вашу программу, это абсолютно возможно, и я думаю, что очень вероятно, что у вас ничего не напечатано, потому что у наблюдателя нет возможности запустить событие, программа завершается после вызова Close. –

+0

это только тестовое приложение, чтобы увидеть, возбуждает ли оно событие. Мне просто нужно быть уверенным, что событие onChange будет расти только после завершения сериализации файла. – MoShe

Смежные вопросы