我正在使用Visual Studio 2008在C#中使用Windows窗体应用程序,而我目前有两种形式MainForm
和TimeSettingForm
。 MainForm
始终打开,而TimeSettingForm
仅在用户单击MainForm
上的Button
时才会打开。每秒执行文件操作有多糟?
我的程序需要事件方法,只发生一次每天一定的时间,用户可以选择那个时间在TimeSettingForm
。由于TimeSettingForm
通常是关闭的,并且设定的时间不受重新开放MainForm
的影响,所以我在TimeSettingForm
中有一个方法,它将设置时间保存在.txt
文件中。时间可以通过仅使用DateTimePicker
的时间部分来选择。
现在,我有一个运行的每一个第二控制Timer
,它不断地从.txt
文件中读取检索设定的时间时,因为时间可以很容易地在TimeSettingForm
改变,而不是一个固定的时间。
/*Timer control that runs every second */
private void TimerForEvent_Tick(object sender, EventArgs e)
{
string eventTime;
string fileName = GetFileName(); //Get the .txt file name here
if (File.Exists(fileName))
{
//Read line
using (StreamReader sr = new StreamReader(fileName))
{
//Event time is in format of "HH:mm"
eventTime = sr.ReadLine();
}
//Separate into hour and minute portion
DateTime dt = Convert.ToDateTime(eventTime);
int eventHour = dt.Hour;
int eventMinute = dt.Minute;
//Check if the current time matches the eventTime
DateTime DTnow = DateTime.Now;
if(DTnow.Hour == eventHour && DTnow.Minute == eventMinute && DTnow.Second == "0")
{
//The event happens
}
}
else
{
eventTime = "Time Not Set";
}
}
然而,这似乎非常低效的,因为它不仅继续检查,如果当前的时间是一样的设定的时间,但它也不断从.txt
文件每秒阅读。有没有更好的方法来实现这一目标? 我也想知道不断从文件中读取数据的做法有多糟糕。
为什么不使用'FileSystemWatcher'?每秒钟效率都很低,但除了调用'File.Exists()'外,没有太大的作用,所以最终的结果不会对机器造成太大的影响。更好的做法是至少增加时间间隔 – DiskJunky
['FileSystemWatcher']的完美用例(https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher%28v=vs。 110%29.aspx?F = 255&MSPPError = -2147217396)。 –
为什么不把值保存在MainForm中?一个事件或表单关闭设置它,所以没有必要监视一个文件这么简单的事情。 –