我是C#初学者,我想编写一个程序,每30秒读取一次配置文件,并检查特定值的某些更改。
我要搜索的值并不总是在同一行号上,因此我要通过键名来搜索这些值。我想找到密钥,然后检查值是否已更改。
首先,我正在测试是否可以在配置文件中找到正确的密钥。
这是我尝试过的。我的问题是我用以下输入调用了此函数:
check_for_changes("TEXTURE_MAX_LOAD =");
并且我希望我的TextBox testtb
在调用该方法后包含单词changes
,但TextBox仍为空白。
public string check_for_changes(string value)
{
int counter = 0;
string line;
System.IO.StreamReader file =
new System.IO.StreamReader(@"C:\Users\EFB\AppData\Roaming\Microsoft\FSXDemo\fsx.CFG");
while ((line = file.ReadLine()) != null)
{
if (line.Contains(value))
{
testtb.Text = "changes";
break;
}
counter++;
}
Console.WriteLine("Line number: {0}", counter);
file.Close();
return value;
}
答案 0 :(得分:0)
您需要将此代码放在要开始检查的位置:
System.Windows.Forms.Timer Timer = new System.Windows.Forms.Timer() { Interval = 30000 };
Timer.Tick += (obj, arg) =>
{
check_for_changes("TEXTURE_MAX_LOAD =");
};
Timer.Start();
小心!!!如果要结束此定时器或要再次停止/启动它,则必须全局声明它。
函数应类似于:
private string LastValue = "";
public string check_for_changes(string value)
{
int counter = 0;
string line;
System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\EFB\AppData\Roaming\Microsoft\FSXDemo\fsx.CFG");
while ((line = file.ReadLine()) != null)
{
if (line.Contains(value))
{
string NewValue = line.Substring(value.Length);
if (NewValue != LastValue)
testtb.Text = "new Value is : " + NewValue;
LastValue = NewValue;
break;
}
counter++;
}
Console.WriteLine("Line number: {0}", counter);
file.Close();
return value;
}
此功能将起作用。