我从http://forum.codecall.net/topic/65434-c-working-with-timers/获取了帮助(在其中使用了递减的计数器,但它在我的应用程序中无效)
我有一些文本字段和两个按钮:提交和更新。 我已经从工具栏实现了一个计时器来更新按钮。
我希望此计时器运行10分钟,然后禁用更新按钮。但目前它只运行了2分钟。
按钮代码:
<asp:Button ID="Btnsave" runat="server" CssClass="bt3dbuttons"
onclick="Btnsave_Click" OnClientClick="return confirm('Data Submitted')"
Text="Submit" Width="77px" />
<asp:Timer ID="Timer2" runat="server" ontick="Timer2_Tick">
</asp:Timer>
<asp:Button ID="Butnupdate" runat="server" CssClass="btupbuttons"
onclick="Btnupdate_Click" Text="Update" visible="false" Width="85px" />
以下是计时器的代码:
private System.Timers.Timer aTimer = new System.Timers.Timer(600000)
{ AutoReset = false };
protected void Timer2_Tick(object sender, EventArgs e)
{
aTimer = new System.Timers.Timer(600000);
aTimer.Interval = 600000;
double counter = aTimer.Interval;
counter++;
if (counter >= 600000)
{
Butnupdate.Enabled = false;
MessageBox.Show("Time Up!");
}
}
更新代码按钮:
protected void Btnupdate_Click(object sender, EventArgs e)
{
string id = Id.Text.Trim();
string name = Name.Text;
string project = Project.Text;
string result = Total.Text;
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CM_Connection"].ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
try
{
//lets check that the user typed the first number
if (Viva.Text.Length > 1)
{
VivaLabel.Text = "Please enter a valid number to add.";
return;
}
//lets check that the user typed the second number
else if (Presentation.Text.Length > 1)
{
PresentationLabel.Text = "Please enter a valid number to add.";
return;
}
else if (Confidence.Text.Length > 1)
{
ConfidenceLabel.Text = "Please enter a valid number to add.";
return;
}
else if (System.Text.Length > 1)
{
SystemLabel.Text = "Please enter a valid number to add.";
return;
}
//Now we have valid inputs
//Lets put them into integer values
int number1 = int.Parse(Viva.Text);
int number2 = int.Parse(Presentation.Text);
int number3 = int.Parse(Confidence.Text);
int number4 = int.Parse(System.Text);
//Now lets add the numbers
int total = number1 + number2 + number3 + number4;
//lets place it into the TextBox3
Total.Text = total.ToString();
// cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = @"UPDATE Result SET Name = @name, Project = @project, Result = @result WHERE ID = @id";
con.Open();
cmd.Parameters.AddWithValue("@id", Id.Text.ToString());
cmd.Parameters.AddWithValue("@name ", Name.Text.ToString());
cmd.Parameters.AddWithValue("@project ", Project.Text.ToString());
cmd.Parameters.AddWithValue("@result ", Total.Text.ToString());
cmd.ExecuteNonQuery();
}
catch (Exception ex1)
{
//Report error to user in the bottom Label
MessageBox.Show(ex1.Message);
}
}
}
答案 0 :(得分:5)
使用此代码作为指南
public class Timer1
{
private static System.Timers.Timer aTimer;
public static void Main()
{
// Create a timer with a ten second interval.
aTimer = new System.Timers.Timer(600000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 10 minutes
aTimer.Interval = 600000;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
// If the timer is declared in a long-running method, use
// KeepAlive to prevent garbage collection from occurring
// before the method ends.
GC.KeepAlive(aTimer);
}
// Specify what you want to happen when the Elapsed event is
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Butnupdate.Enabled = false;
MessageBox.Show("Time Up!");
}
}
取自
的例子http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx
答案 1 :(得分:3)
设置asp:Timer的Interval属性然后这将回发页面并调用ontick处理程序
<asp:Timer ID="Timer2" runat="server" ontick="Timer2_Tick" Interval="60000">
</asp:Timer>
http://msdn.microsoft.com/en-us/library/system.web.ui.timer.interval.aspx
我不确定您在服务器代码上使用System.Timers.Timer
尝试做什么,除非您的页面处理耗时非常长。
答案 2 :(得分:1)
如果你的计时器是一个长期运行的方法而不是作为课程的一部分,你的计时器可能会被垃圾收集,我无法通过发布的代码告诉你。
阅读Timer.Interval Property文档,其中还有一些如何实现计时器的示例。
答案 3 :(得分:1)
According to the System.Timers.Timer class documentation,它会以异步方式在定义的时间过后触发事件。
设置代码如下所示:
var aTimer = new System.Timers.Timer(10 * 60 * 1000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
事件本身就像这样:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//Do your event management here.
}
希望它适合你。
答案 4 :(得分:0)
问题已通过以下代码解决:
创建计时器(默认可以从工具箱中使用) 设置计时器间隔属性
<asp:Timer ID="Timer2" runat="server" ontick="Timer2_Tick"
Interval="600000">
</asp:Timer>
参考:http://msdn.microsoft.com/en-us/library/system.web.ui.timer.interval.aspx
为计时器创建事件处理程序:
protected void Timer2_Tick(object sender, EventArgs e)
{
if (timeLeft > 0)
{
// Display the new time left
// by updating the Time Left label.
timeLeft = timeLeft - 1;
Label1.Text = timeLeft + " seconds";
}
else
{
// If the user ran out of time, stop the timer, show
// a MessageBox, and fill in the answers.
Timer2.Enabled = false;
Label1.Text = "Time's up!";
MessageBox.Show("You didn't finish in time.", "Sorry");
Butnupdate.Enabled = false;
}
在您希望计时器启动的按钮中使用以下内容:
timeLeft = 600;
Label1.Text = DateTime.Now.ToString("HH:mm:ss tt");
Timer2.Enabled = true;
如果要显示当前系统时间或当前时间,请使用
Label1.Text = DateTime.Now.ToString("HH:mm:ss tt");
我将它标记为标签以及如何操作以及上面请看这里: http://msdn.microsoft.com/en-us/library/dd492144.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
这里我们去一个计时器,在10分钟后禁用按钮:) 希望它也有助于某人:)