смотреть файл при выполнении других действий - PullRequest
0 голосов
/ 24 мая 2018

Я реализую приложение winform, которое должно выполнять следующие действия:

  1. OnLoad, открывать файл XML, читая требуемую информацию, наблюдая за любыми новыми изменениями в файле (входящей новой информацией)
  2. Таймер, выполняющий определенные действия в зависимости от характера предоставленной информации из файла XML.Обратите внимание, что характер действия зависит от содержимого файла XML

Каков наилучший способ достижения этого?Две темы?Асинхронный?Некоторые отправная точка будет высоко ценится.

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, вам нужна такая структура.Сначала вы читаете XML-файл и настраиваете свой пользовательский объект MyConfigurationClass.После этого вы можете настроить FileSystemWatcher объект.И, наконец, вы можете сконфигурировать свой объект расписания задач с желаемым интервалом времени.

public partial class MainWindow : Window
{
    MyConfigurationClass configuration;

    string filePath = @"./some.xml";
    FileSystemWatcher fileWatcher = new FileSystemWatcher();
    System.Timers.Timer timer = new System.Timers.Timer();

    public MainWindow()
    {
        // First read action action for 
        var task = Task.Run(() => ReadXML());

        InitializeComponent();

        FileWatherConfigure();

        TimerConfigure(task.Result);
    }

    private void FileWatherConfigure()
    {
        fileWatcher.Path = System.IO.Path.GetDirectoryName(filePath);
        fileWatcher.Filter = System.IO.Path.GetFileName(filePath);
        fileWatcher.Changed += FileWatcher_Changed;
        fileWatcher.EnableRaisingEvents = true;
    }

    private void TimerConfigure(SomeClass someClass)
    {
        timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        timer.Interval = configuration.TimeInterval.TotalMilliseconds;
        timer.Enabled = true;
    }

    private void FileWatcher_Changed(object sender, FileSystemEventArgs e)
    {
        Thread.Sleep(TimeSpan.FromSeconds(1));

        SomeClass someClass = ReadXML();
        // Do whatever you want file change
    }

    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        timer.Stop();
        try
        {
            // Schedule Operation
        }
        catch (Exception ex)
        {

        }
        timer.Start();

    }

    private SomeClass ReadXML()
    {
        // Read file and do what ever you want
    }
}

public class SomeClass
{
    // Data from XML
}

public class MyConfigurationClass
{
    public TimeSpan TimeInterval { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...