作为一个问题,我需要继续检查文件夹是否在3分钟内创建完毕...最初,我将myVar设置为0,每次计时器运行时,它将在else部分中一直添加到3,然后执行其他操作功能。任何人都可以在这件事上为我提供帮助,因为我不熟悉将数据解析为计时器...
class Program
{
public static void Main(string[] args)
{
int myVar = 0;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 60000; // Currently set to 1 minutes
timer.Elapsed += (sender, e) => timer_Elapsed(sender, e, myVar);
timer.Start();
}
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, int myVar)
{
DirectoryInfo imagepath = new DirectoryInfo(@"C:\Users");
DirectoryInfo[] directoryInfo = imagepath.GetDirectories();
string directoryFolderName = "";
string subdirectoryFolderName = "";
string fullPathName = "";
foreach (DirectoryInfo directory in directoryInfo)
{
directoryFolderName = directory.Name;
}
if (directoryFolderName.Contains("ABB"))
{
fullPathName = imagepath + "\\" + directoryFolderName;
DirectoryInfo path = new DirectoryInfo(fullPathName);
DirectoryInfo[] subdirectoryInfo = path.GetDirectories(); ;
foreach (DirectoryInfo subDirectory in subdirectoryInfo)
subdirectoryFolderName = subDirectory.Name;
if (subdirectoryFolderName.Contains("folder"))
{
string tempPath = fullPathName + "\\" + "folder";
mainFunction(path, imagepath);
}
else
{
Console.WriteLine(fullPathName);
Console.WriteLine("tif folder not found!!!");
string msg = "Program failed unexpectedly. Error Msg: folder not found!!!";
WriteExceptionFile(msg, null);
}
}
else
{
Console.WriteLine("Minutes: " + myVar);
myVar += 1;
}
}
答案 0 :(得分:2)
默认情况下,int
是按值传递的,这意味着当您在timer_elapsed
方法内部更新变量时,该变量不会反映在该方法之外。
一个简单的解决方案是强制使用ref
关键字通过引用传递int:
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, ref int myVar){ ... }
这是一个简单的演示:https://rextester.com/UOBCK74072
答案 1 :(得分:0)
您将myVar作为参数发送。因此,方法的更改不能更改主变量的值。 您可以定义myVar静态变量并直接更改其值。也可以使用main方法之外的全局变量。
static int x = 0;
static void Main(string[] args)
{
Console.WriteLine(x); // before call foo->0
foo();
Console.WriteLine(x); // after call foo -> 10
Console.ReadKey();
}
public static void foo()
{
x = 10;
}
答案 2 :(得分:-1)
使用out关键字从计时器回调中获取更新的值
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, out int myVar)
{ ... }
这应该有效。