gpt4 book ai didi

c# - 如何使用 Reactive 扩展实现 filewatcher

转载 作者:太空狗 更新时间:2023-10-29 23:16:20 26 4
gpt4 key购买 nike

我是 Rx 的新手,希望在我当前的项目中使用它。我正在尝试实现一个文件观察器系统。至少现在我只对文件创建事件感兴趣。但是当我试图在代码下面运行时,我收到“值不能为空错误消息”。请有人帮我解决以下代码。

class Program
{
static void Main(string[] args)
{
IDisposable writer = new FileSystemObservable(@"D:\Code\Rx\Dropbox\", "*.*", false)
.CreatedFiles
.Where(x => (new FileInfo(x.FullPath)).Length > 0)
.Select(x => x.Name)
.Subscribe(Console.WriteLine);
Console.ReadLine();
}
}


class FileSystemObservable
{
private readonly FileSystemWatcher fileSystemWatcher;

public FileSystemObservable(string directory, string filter, bool includeSubdirectories)
{
fileSystemWatcher = new FileSystemWatcher(directory, filter)
{
EnableRaisingEvents = true,
IncludeSubdirectories = includeSubdirectories
};

CreatedFiles = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>
(h => fileSystemWatcher.Created += h,
h => fileSystemWatcher.Created -= h)
.Select(x => new { x.EventArgs }) as IObservable<FileSystemEventArgs>;

Errors = Observable.FromEventPattern<ErrorEventHandler, ErrorEventArgs>
(h => fileSystemWatcher.Error += h,
h => fileSystemWatcher.Error -= h)
.Select(x => new { x.EventArgs }) as IObservable<ErrorEventArgs>;
}

public IObservable<ErrorEventArgs> Errors { get; private set; }

public IObservable<FileSystemEventArgs> CreatedFiles { get; private set; }
}

最佳答案

结果

Select(x => new { x.EventArgs }) as IObservable<ErrorEventArgs> 

.Select(x => new { x.EventArgs }) as IObservable<FileSystemEventArgs>;

行将始终返回 null。

Select(x => new { x.EventArgs }) 的类型是IObservable<'a>其中 'a是某种匿名类型。

你应该改用:

CreatedFiles = 
Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>(
h => fileSystemWatcher.Created += h,
h => fileSystemWatcher.Created -= h)
.Select(x => x.EventArgs);

Errors =
Observable.FromEventPattern<ErrorEventHandler, ErrorEventArgs>(
h => fileSystemWatcher.Error += h,
h => fileSystemWatcher.Error -= h)
.Select(x => x.EventArgs);

关于c# - 如何使用 Reactive 扩展实现 filewatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com