Visual Studio 2008を使用してC#でWindowsフォームアプリケーションを作成していますが、現在2つのフォームMainForm
とTimeSettingForm
があります。 MainForm
は常に開いていますが、TimeSettingForm
はMainForm
のButton
をクリックしたときにのみ開きます。1秒ごとにファイル操作を実行するのはいかがですか?
私のプログラムでは、毎晩という特定の時刻に一度だけが発生し、ユーザーは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を使用しないのですか? 1秒ごとにかなり効率が悪いですが、 'File.Exists()'を呼び出すこととはあまり離れていないので、最終結果はマシン全体に大きな影響を与えません。最低でも時間間隔を増やす方が良いでしょう – DiskJunky
['FileSystemWatcher']の完全な使用例(https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs。 110%29.aspx?f = 255&MSPPError = -2147217396)。 –
MainFormに値を保存してみませんか?イベントやフォームクローズでは、このような簡単なことをファイルを監視する必要はありません。 –