Visual Studio 2008을 사용하는 C#의 Windows Form 응용 프로그램에서 작업 중이며 현재 두 개의 양식 MainForm
과 TimeSettingForm
이 있습니다. MainForm
은 항상 열려 있고 TimeSettingForm
은 Button
이 MainForm
에있을 때만 열립니다.매초마다 파일 작업을 수행하는 것이 얼마나 안 좋은가요?
내 프로그램에는 매일이라는 특정 시간에 한 번만 번 발생하는 이벤트 메서드가 필요하며 사용자는 TimeSettingForm
에서 해당 시간을 선택할 수 있습니다. TimeSettingForm
은 대개 닫히고 설정 시간은 MainForm
을 다시 열어도 영향을받지 않아야하므로 설정 시간을 .txt
개로 저장하는 TimeSettingForm
에 있습니다. 시간은 DateTimePicker
의 시간 부분 만 사용하여 선택할 수 있습니다.
는 지금, 나는 매 초마다 실행되는 Timer
제어 할 수 있습니다, 그것은 지속적으로 시간을 쉽게 오히려 고정 된 시간보다 TimeSettingForm
에 변경 얻을 수 있기 때문에, 이벤트에 대한 설정 시간을 검색 할 .txt
파일에서 읽습니다.
/*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/en-us/library/system.io.filesystemwatcher%28v=vs)의 완벽한 유스 케이스. 110 % 29.aspx? f = 255 & MSPPError = -2147217396). –
왜 MainForm에 값을 유지하지 않습니까? 이벤트 나 폼 클로즈로 설정하면 파일을 모니터링 할 필요가 없습니다. –