ตอนที่ 4 : การทำ Job Schedule Time ตั้งเวลาทำงานบน Windows Service (VB.Net,C#) |
การทำ Job Schedule Time ตั้งเวลาทำงานบน Windows Service (VB.Net,C#) การจะทำให้ Windows Service ทำงานแบบตลอดเวลาตามระยะเวลาที่กำหนด ในบทความก่อนหน้านี้เราจะใช้ Timer ในการกำหนดให้ Windows Service ทำงานเป็น Loop แล้วค่อยมาเขียนเงื่อนไขเพื่อให้โปรแกรมทำงานต่างๆ ตามที่ต้องการ แต่ข้อเสียของการใช้ Timer คือ โปรแกรมอาจจะทำงานโดยที่ไม่จำเป็น เช่น ถ้าเราต้องการให้โปรแกรมทำงานทุกๆ วัน ตอนเวลา 10:00 น. ในกรณีที่ใช้ Timer อาจจะต้องตั้งเวลาทุกๆ 5 วินาที แล้วค่อยตรจสอบว่าเวลาปัจจุบันถึง 10:00 แล้วหรือยัง วิธีนี้จะเห็นว่าเราต้องการให้โปรแกรมทำงานแค่ครั้งเดียวตอนเวลา 10:00 น. แต่ต้องใช้ Timer เช็คทุกๆ 5 วินาทีเพื่อคอยตรวจสอบเวลา ซึ่งจะเห็นว่าเกิด Process การทำงานที่ไม่จำเป็น นับหลายร้อยครั้ง และอาจจะทำให้ Performance ของ โปรแกรมลดลงไปอีกด้วย
การทำ Job Schedule เป็นปัญหาของการเขียนโปรแกรม เพราะปัจจุบัน .Net Framework เองก็ไม่มี Control ที่มาจัดการ Job Schedule ได้ จึงมีนักพัฒนาโปรแกรมหลายๆ คน พยายามสร้าง Control เข้ามาจัดการในส่วนของการใช้งาน Job Schedule ซึ่งมีอยู่ตัวหนึ่งที่อยากจะแนะนำ แล้วได้ทดลองใช้งานแล้วพบว่ามันสามารถทำงานได้เป็นอย่างดี
(.Net) เขียน Windows App / Console App ตั้งเวลาการทำงาน Schedule Timer (VB.Net,C#)
และมันสามารถที่จะนำมาใช้กับโปรเจคที่เขียนด้วย Windows Service ได้ด้วยเช่นเดียวกัน
ขั้นแรกให้ทำการ Add Reference ไฟล์ ScheduleTimer.dll เข้ามาใน Project
เลือก Browse ไฟล์ ScheduleTimer.dll
เลือกไฟล์ ScheduleTimer.dll
ScheduleTimer เข้ามาในโปรเจค จากนั้นเขียน Code ต่างๆ ดัวนี้
C#
ScheduleTimer Timer = new ScheduleTimer();
protected override void OnStart(string[] args)
{
string strPath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
System.IO.File.AppendAllLines(strPath, new[] { "Starting time : " + DateTime.Now.ToString() });
Timer.Elapsed += new ScheduledEventHandler(timer_Elapsed);
Timer.AddEvent(new ScheduledTime("Daily", "23:33"));
Timer.Start();
}
private void timer_Elapsed(object sender, ScheduledEventArgs e)
{
string strPath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
System.IO.File.AppendAllLines(strPath, new[] { "..calling time : " + DateTime.Now.ToString() });
}
protected override void OnStop()
{
string strPath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
System.IO.File.AppendAllLines(strPath, new[] { "Stop time : " + DateTime.Now.ToString() });
Timer.Stop();
}
VB.Net
Private Timer As New ScheduleTimer()
Protected Overrides Sub OnStart(ByVal args() As String)
Dim strPath As String = AppDomain.CurrentDomain.BaseDirectory + "Log.txt"
Dim lines() As String = {"Starting time : " + DateTime.Now.ToString()}
System.IO.File.AppendAllLines(strPath, lines)
AddHandler Timer.Elapsed, New ScheduledEventHandler(AddressOf timer_Elapsed)
Timer.AddEvent(New ScheduledTime("Daily", "23:33"))
Timer.Start()
End Sub
Private Sub timer_Elapsed(sender As Object, e As ScheduledEventArgs)
Dim strPath As String = AppDomain.CurrentDomain.BaseDirectory + "Log.txt"
Dim lines() As String = {"..calling time :" + DateTime.Now.ToString()}
System.IO.File.AppendAllLines(strPath, lines)
End Sub
Protected Overrides Sub OnStop()
Dim strPath As String = AppDomain.CurrentDomain.BaseDirectory + "Log.txt"
Dim lines() As String = {"Stop time : " + DateTime.Now.ToString()}
System.IO.File.AppendAllLines(strPath, lines)
End Sub
จาก Code ตั้งให้ทำงานเวลา 23:30 และเขียนข้อความ calling time....
การ Install/Uninstall โปรแกรม Windows Service ที่ได้จาก Visual Studio (VB.Net,C#)
ทดสอบการทำงาน
ตอนที่นี้เวลา 23:30
แต่ Schedule ตั้งให้เวลาทำงาน 23:30
หลังจากที่ Install เรียบร้อยให้ทำการ Start Service
จะเห็นว่า Log.txt ถูกสร้างจาก OnStart และเขียนข้อความลงเข้าไป แต่ยังไม่ถึงเวลาที่ Job Schedule ทำงาน และ จะเขียนข้อความ calling time... เพิ่มเข้าไป
ถึงแล้ว 23:33
จะเห็นว่า Job Schedule ทำงานตอนเวลา 23:33 และเขียนข้อความเพิ่มลงไปใน Log.txt
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2017-04-19 15:36:36 /
2017-04-20 15:02:21 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|