在 C# 中,使事件每 20 秒单击一次按钮 Asp.Net 发生一次
本文关键字:一次 Asp Net 按钮 单击 事件 | 更新日期: 2023-09-27 18:36:14
一旦我点击一个按钮,我就会尝试每天发生某个动作,但出于测试目的,我试图让它每 20 秒发生一次,只是为了看看它是否有效。目前,什么都没有发生,我不知道我哪里出了问题。
public void AddIncoming_Click(object sender, EventArgs e)
{
if (frequencyIncoming.SelectedValue == "Weekly")
{
DateTime weekly = DateTime.Now;
for (DateTime current = weekly; current == current.AddSeconds(20);)
{
//totalCalculation = (totalCalculation + Convert.ToDouble(costIncoming));
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + DateTime.Now + "');", true);
}
}
SqlCommand cmd = new SqlCommand("insert into Incomings (AspNetUsersId,IncType,IncDate,IncCost,IncFrequency) values (@AspNetUsersId, @IncType, @IncDate, @IncCost, @IncFrequency)");
cmd.Parameters.AddWithValue("@AspNetUsersId", userId);
cmd.Parameters.AddWithValue("@IncType", typeIncoming.Text);
cmd.Parameters.AddWithValue("@IncDate", lblCalendar.Text);
cmd.Parameters.AddWithValue("@IncCost", costIncoming.Text);
cmd.Parameters.AddWithValue("@IncFrequency", frequencyIncoming.Text);
loadDatabase(cmd);
Response.Redirect(Request.Url.AbsoluteUri);
}
任何信息都非常感谢!干杯
编辑:实际上,只需这样做(如果您可以检测到程序正在关闭,可能会放入一些逻辑来设置"keepLooping = false"):
public void AddIncoming_Click(object sender, EventArgs e)
{
if (frequencyIncoming.SelectedValue == "Weekly")
{
DateTime weekly = DateTime.Now;
TimeSpan timeToWait = new TimeSpan(0, 0, 0, 5); // days, hours, minutes, seconds
bool keepLooping = true;
while (keepLooping)
{
if (DateTime.Now.Subtract(weekly) < timeToWait)
{
//sleep 1 second while waiting so cpu doesn't spin at maximum
System.Threading.Thread.Sleep(1000);
}
else
{
// this code will run every ~timeToWait
Console.WriteLine($"{DateTime.Now.Subtract(weekly)} seconds have elapsed.");
weekly = DateTime.Now;
}
}
}
SqlCommand cmd = new SqlCommand("insert into Incomings (AspNetUsersId,IncType,IncDate,IncCost,IncFrequency) values (@AspNetUsersId, @IncType, @IncDate, @IncCost, @IncFrequency)");
cmd.Parameters.AddWithValue("@AspNetUsersId", userId);
cmd.Parameters.AddWithValue("@IncType", typeIncoming.Text);
cmd.Parameters.AddWithValue("@IncDate", lblCalendar.Text);
cmd.Parameters.AddWithValue("@IncCost", costIncoming.Text);
cmd.Parameters.AddWithValue("@IncFrequency", frequencyIncoming.Text);
loadDatabase(cmd);
Response.Redirect(Request.Url.AbsoluteUri);
}