C#如何定時執行程序(例如每天晚上12:00)
--------------------------------------------------------------------------------
類似於Java裡面的Timer.Schedule TimeTask
謝謝
--------------------------------------------------------------------------------
c#也有timer~~
System.Timer
或者是 System.Theading.Timer
具體用法可以查詢下msdn
--------------------------------------------------------------------------------
使用Timer
System.Timers.Timer aTimer = new System.Timers.Timer();
public RechargeFrm()
{
//
// Windows 窗體設計器支持所必需的
//
InitializeComponent();
components=null;
AutoTime.SelectedIndex=0;
aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
// Create a new Timer with Interval set to 3 seconds.
//
// TODO: 在 InitializeComponent 調用後添加任何構造函數代碼
//
}
--------------------------------------------------------------------------------
// Only raise the event the first time Interval elapses.
aTimer.AutoReset = true;
aTimer.Enabled = flag;
//aTimer.Interval=Int32.Parse(AutoTime.SelectedItem.ToString())*300;//9s
aTimer.Interval=Int32.Parse(AutoTime.SelectedItem.ToString())*1000*60;//30m
//Console.WriteLine("Press \'q\' to quit the sample.");
//while(Console.Read()!='q');
--------------------------------------------------------------------------------
c#也有Timer,另外也可以用Thread,或者Windows的計劃任務
private Timer _timer;
private int _Interval=30000;
_timer = new Timer();
_timer.Enabled = true;
_timer.Interval = _Interval;
_timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//todo something
}
--------------------------------------------------------------------------------
最簡便的方法就是將定時執行交給Windows的計劃任務來完成;
或者實現一個Windows服務
--------------------------------------------------------------------------------
Windows的計劃任務是個不錯的方法!
--------------------------------------------------------------------------------
那如何指定每天晚上12:00執行?
或者說晚上12:00第一次執行,然後每3小時執行一次
--------------------------------------------------------------------------------
我現在需要指定 第一次程序執行的具體時間
--------------------------------------------------------------------------------
上面的方法都是延遲在什麼時候發生的,樓主要的是”按時“執行的,
UP一下。
--------------------------------------------------------------------------------
用計劃任務不就可以啦?自己寫的話要寫Windows服務。
--------------------------------------------------------------------------------
還是timer控制比較好吧.
--------------------------------------------------------------------------------
ohyear()理解我的意思了
計劃任務根本不可行,因為我的應用是ASP.Net,而且是放在虛擬主機上
timer控制只能實現定時執行,不能指定具體開始執行的時間,例如晚上12:00開始執行
--------------------------------------------------------------------------------
stringCurrTime=System.DateTime.Now.ToShortTimeString();
string s="12:00";
if( CurrTime==s)
{ //程序執行代碼
}
--------------------------------------------------------------------------------
xjpeng(海風) 的改一下:
private Timer _timer;
private int _Interval=30000;
_timer = new Timer();
_timer.Enabled = true;
_timer.Interval = _Interval;
_timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//todo something
}
在todo something那裡寫下面的:
stringCurrTime=System.DateTime.Now.ToShortTimeString();
string s="12:00";
if( CurrTime==s)
{ //程序執行代碼
}
這樣應該可以了吧?
--------------------------------------------------------------------------------
UP
--------------------------------------------------------------------------------
mark
--------------------------------------------------------------------------------
最簡便的方法就是將定時執行交給Windows的計劃任務來完成;
或者實現一個Windows服務
----------------------------------------------------------
how to implement the Windows servic?
My email is: [email protected]
please contact me if you know it!
Thank you
--------------------------------------------------------------------------------
學習
--------------------------------------------------------------------------------
得到時間的辦法可以執行
要是此時c#程序已經關閉了呢?怎麼得到時間
--------------------------------------------------------------------------------
還是只能加入計劃任務吧
--------------------------------------------------------------------------------
egxsun():
這樣子可行是可行,程序看上去總是有點土
看來.Net的類庫裡面沒提供類似於Java的方法
--------------------------------------------------------------------------------
關注!
--------------------------------------------------------------------------------
關注。。。
同樣的問題:
如果機器程序都關閉了,system.time還能取得嗎?
--------------------------------------------------------------------------------
up
--------------------------------------------------------------------------------
ASP.Net做不了。IIS端不能主動做任何事的。要不你就在自己機器上寫個計劃任務每天定時去請求那個虛擬主機一下,讓它執行事先寫好的任務。
所謂定時12點一般也不過是用Timer,隔個幾秒鐘去問一下系統到沒到12點啊?到了就執行這種。
--------------------------------------------------------------------------------
www.moblog.Net.cn/sunshine.com這個軟件定時任務 功能 而且是 不用編譯入程序 直接用反射調用你的dll
--------------------------------------------------------------------------------
up
--------------------------------------------------------------------------------
MSDN
--------------------------------------------------------------------------------
直接用C#自己的Timer類就完全可以實現的?gt;>N乙丫芎玫目刂屏耍?nbsp;而且是很復雜的控制。沒有問題的。
--------------------------------------------------------------------------------
調用外部命令我知道~用at 命令
具體用法你加個/? 看下幫助!
--------------------------------------------------------------------------------
虛擬主機嗎?ASP.Net可不行
--------------------------------------------------------------------------------
關注
--------------------------------------------------------------------------------
還是做個啟動服務
--------------------------------------------------------------------------------
我一直用Windows計劃任務進行自動記費系統的運行!效果很好!
--------------------------------------------------------------------------------
gz
--------------------------------------------------------------------------------
控制面板-〉任務計劃-〉添加任務-〉選擇你的程序,設置時間
--------------------------------------------------------------------------------
學習
--------------------------------------------------------------------------------
使用Windows自己的東西
--------------------------------------------------------------------------------
Windows service
Windows schedule
sql dts job
...
--------------------------------------------------------------------------------
最簡單的方法~把你要執行的程序語句寫在一個事件裡面(就象button_onClick),然後用Timer的Tick調用那個事件就可以了~(當然你要給Timer的Interval屬性賦上時間它是以毫秒計算的)用Timer的Enabled
來控制你是否執行你的事件~
不知是否對你有幫助~我就是這麼用的~呵呵~
--------------------------------------------------------------------------------
寫到計劃任務裡面去嘛
我在用C#.Net開發BS結構程序中遇到一個問題,怎樣能夠不打開頁面的情況下查詢數據庫並執行特定的操作,經過網上查詢和試驗得出如下代碼
更改 Global.asax.cs 文件如下
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Timers;
using System.Data;
using System.Data.SqlClIEnt;
namespace SMS_joke
{
/// <summary>
/// Global 的摘要說明。
/// </summary>
public class Global : System.Web.HttpApplication
{
/// <summary>
/// 必需的設計器變量。
/// </summary>
private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
SetTimer();
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
}
public static void SetTimer()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimer);
aTimer.Interval = 5000;
aTimer.Enabled = true;
}
public static void OnTimer(Object source, ElapsedEventArgs e)
{
System.Data.SqlClIEnt.SqlConnection sqlConnection1;
System.Data.SqlClIEnt.SqlCommand sqlCommand1;
string customSetting = System.Configuration.ConfigurationSettings.APPSettings["SqlStr"];
sqlConnection1 = new SqlConnection();
sqlConnection1.ConnectionString = customSetting ;
sqlConnection1.Open();
string str = "UPDATE TABLE1 SET js = JS + 1 " ;
sqlCommand1 = new SqlCommand(str,sqlConnection1) ;
sqlCommand1.ExecuteNonQuery();
sqlConnection1.Close();
}
#region Web 窗體設計器生成的代碼
/// <summary>
/// 設計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
}
}