gpt4 book ai didi

c# - 多线程 FileSystemWatcher 监视本地文件夹更改和计时器在网络中断时处理并在窗口服务中再次 Ping

转载 作者:行者123 更新时间:2023-11-30 13:03:22 26 4
gpt4 key购买 nike

默认情况下,机器编写的脚本将文件保存到本地/服务器路径文件夹,但由于网络问题,两个文件夹不同步。我已经使用 FileSystemWatcher、DiffEngine、System.Timers 和 PingService 编写了一个 C# 窗口服务程序,如下编码来处理此问题。要监视本地文件夹 OnChange 事件,在比较/复制到服务器路径之前 Ping 服务器 IP 是否成功/失败,当 Ping 失败时它将转到 logtemp 文件夹,系统计时器处理此并在重新转储 logtemp 文件之前再次 Ping。

我不知道如何为此使用线程。当 ping 失败时,我的系统计时器代码应该在哪里?

protected override void OnStart(string[] args)
{ //all watcher config here//
watcher.Path = "path";
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "filename_company-Pg1_Product*";
watcher.Changed += new FileSystemEventHandler(LogFileSystemChanges);
watcher.EnableRaisingEvents = true;}

private void LogFileSystemChanges(object sender, FileSystemEventArgs e)
{
FileInfo sourcepath = new FileInfo(e.FullPath);
FileInfo destPath = new FileInfo(Path.Combine(dFile, e.Name));
FileInfo _tempPath = new FileInfo(Path.Combine(tempPath, e.Name));

if (PingService())
//PingService Bool Type....Ping Specific IP Before Compare/Copy
{
if (!destPath.Exists)
{
LogEvent(destPath + " DOES NOT EXIST!! ");
CopyFunction.CopyFile(sourcepath, destPath, true, true);
}
else
{
if (BinaryDiff(sFile, Path.Combine(dFile, e.Name)))
//DiffEngine If Source & Diff are Different is TRUE.
{
CopyFunction.CopyFile(sourcepath, destPath, true, true);
}
}
string msg = string.Format("Filename {0} are {1} now at {2} ", _
e.Name, e.ChangeType, DateTime.Now.ToString());
LogEvent(msg);
}
else
{
CopyFunction.CopyFile(sourcepath, _tempPath, true, true);
}
}

最佳答案

使用 NServiceBus(他们称之为 Saga)

它是一个开源项目,可以让您的代码在网络中断的情况下万无一失。

或者您只是问如何制作线程?

如果是,请参阅 MSDN on examples for creating threads

关于c# - 多线程 FileSystemWatcher 监视本地文件夹更改和计时器在网络中断时处理并在窗口服务中再次 Ping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098778/

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