FileSystemWatcher в AspNetCore 2.1 BackgroundService \ IHostedService - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь использовать реализацию BackgroundService в приложении AspNet Core 2.1.Я создаю FileSystemWatcher в ExecuteAsync и связываю связанные события, однако, события fsw либо никогда не запускаются (недоступны? Уже удалены?), Либо я ошибаюсь, что это асинхронно, или область действия испорчена.Я не могу понять это.Ниже приведен соответствующий код.

public class FSWImpl : BackgroundService
{
    private readonly IHostingEnvironment _env;
    private readonly ILogger<LiftAndShift> _logger;
    private FileSystemWatcher _fsw;

    public LiftAndShift(IHostingEnvironment env, ILogger<FSWImpl> logger)
    {
        _env = env;
        _logger = logger;
    }

    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Creating new FSW");
        var path = Path.Combine(_env.ContentRootPath, "WebData");
        _fsw = new FileSystemWatcher(path,"*.json");
        _fsw.Created += _fsw_Created;
        _fsw.Changed += _fsw_Changed;
        _fsw.Renamed += _fsw_Renamed;
        _fsw.Error += _fsw_Error;
        return Task.CompletedTask;
    }

    private void _fsw_Error(object sender, ErrorEventArgs e) => _logger.LogInformation("File error");
    private void _fsw_Renamed(object sender, RenamedEventArgs e) => _logger.LogInformation("File Renamed");
    private void _fsw_Changed(object sender, FileSystemEventArgs e) => _logger.LogInformation("File changed");
    private void _fsw_Created(object sender, FileSystemEventArgs e) => _logger.LogInformation("File created");
}  

Я регистрирую эту услугу при запуске как services.AddHostedService<FSWImpl>();

1 Ответ

0 голосов
/ 06 декабря 2018

Для включения FileSystemWatcher необходимо установить EnableRaisingEvents как True.

Демо-код:

        protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Creating new FSW");
        var path = Path.Combine(_env.ContentRootPath, "WebData");
        _fsw = new FileSystemWatcher(path, "*.json");
        _fsw.Created += _fsw_Created;
        _fsw.Changed += _fsw_Changed;
        _fsw.Renamed += _fsw_Renamed;
        _fsw.Error += _fsw_Error;
        _fsw.EnableRaisingEvents = true;
        return Task.CompletedTask;
    }

FileSystemWatcher.cs

    //
    // Summary:
    //     Gets or sets a value indicating whether the component is enabled.
    //
    // Returns:
    //     true if the component is enabled; otherwise, false. The default is false. If
    //     you are using the component on a designer in Visual Studio 2005, the default
    //     is true.
    //
    // Exceptions:
    //   T:System.ObjectDisposedException:
    //     The System.IO.FileSystemWatcher object has been disposed.
    //
    //   T:System.PlatformNotSupportedException:
    //     The current operating system is not Microsoft Windows NT or later.
    //
    //   T:System.IO.FileNotFoundException:
    //     The directory specified in System.IO.FileSystemWatcher.Path could not be found.
    //
    //   T:System.ArgumentException:
    //     System.IO.FileSystemWatcher.Path has not been set or is invalid.
    public bool EnableRaisingEvents { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...