我是C#的新手,我正在创建一个稍后将由Windows Process使用的dll(但现在我需要从控制台应用程序调用它进行测试),我从一个非常基本的dll开始,该dll具有扫描功能,然后以时间间隔删除特定文件夹中的文件,如果在一段时间后没有找到文件,我需要终止原始进程,然后重新启动它。
以下是DLL的代码,它可能需要一些修复/改进:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MyDll
{
public class MyDLLFunctions
{
long TimeSinceLastProcessing;
bool isActive;
bool isProcessing;
public MyDLLFunctions(String ConfigFilePath, bool ProcessBigFiles)
{
this.TimeSinceLastProcessing = DateTimeOffset.Now.ToUnixTimeSeconds();
isActive = true;
}
public void StartScan()
{
// Set up the timer to check for new files every 30 seconds
int interval = 30;
int RestartAfterNSecondsOfInactivity = 120;
long curTime = 0;
Timer timer = new Timer(ScanInputFolders, null, 0, interval);
while (true)
{
// Wait before stopping the program
Thread.Sleep(TimeSpan.FromSeconds(interval));
curTime = DateTimeOffset.Now.ToUnixTimeSeconds();
if(curTime - this.TimeSinceLastProcessing > RestartAfterNSecondsOfInactivity)
{
break;
}
}
timer.Dispose();
isActive = false;
}
private void ScanInputFolders(object state)
{
if (!isProcessing)
{
isProcessing = true;
string folderPath = @"C:\Devs\TestFiles\";
// Check if there are any JSON files in the folder
string[] jsonFiles = Directory.GetFiles(folderPath, "*.json");
foreach (string jsonFile in jsonFiles)
{
ProcessFoundFile(jsonFile);
}
isProcessing = false;
}
}
public bool IsActive()
{
return isActive;
}
private void ProcessFoundFile(String FilePath)
{
TimeSinceLastProcessing = DateTimeOffset.Now.ToUnixTimeSeconds(); // for test
File.Delete(FilePath);
}
}
}
我的问题是如何从我的控制台应用程序中调用新进程*(或多个进程)**中的StartScan()(后面我将使用两个进程:一个用于大文件,一个用于小文件),以及如何知道处理何时终止(IsActive()=false)以终止和重新启动进程
1条答案
按热度按时间pdtvr36n1#
要在新进程中调用StartScan(),可以使用C#中System.Diagnostics命名空间中的Process类。下面是一个例子:
要将ProcessBigFiles参数传递给MyDLLFunctions构造函数,可以修改MyDLLProcess控制台应用的Main方法,如下所示:
要知道处理何时终止,可以定期调用MyDLLFunctions示例的**IsActive()**方法。下面是一个示例,说明如何执行此操作:
此代码启动该过程,然后进入一个无限循环,在此循环中,它使用**IsActive()方法定期检查函数是否仍然处于活动状态。如果该函数不再活动,它将终止当前进程,并使用process.Start()**启动一个新进程。您可以调整等待时间和其他参数以满足您的特定需求。