【发布时间】:2020-02-12 22:43:05
【问题描述】:
我正在尝试使用计时器每隔几秒重复一次从表中选择的随机记录,但它不起作用。
protected void Page_Load(object sender, EventArgs e)
{
var timer = new System.Timers.Timer(3000); // every 3 second
timer.Elapsed += HandleTimerElapsed;
}
public void HandleTimerElapsed(object sender, ElapsedEventArgs e)
{ OleDbCommand cmd = new OleDbCommand("SELECT TOP 1 userdaten.image FROM userdaten ORDER BY Rnd(ID)", con);
con.Open();
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read()) { PictureTrainLabel.Text = "~/Image/" + dr["image"].ToString(); }
PictureTrain.ImageUrl = PictureTrainLabel.Text;
}
con.Close();
}
选择随机行有效,但使用重复方法执行其代码则无效。我可以在 C# 中不使用计时器重复一个函数吗?
【问题讨论】:
-
每秒钟查询一次数据库似乎……不是很有用。您能否请edit 发帖澄清您希望通过此实现的目标?
-
如果这是一个 WinForms 应用程序,您应该使用 System.Windows.Forms.Timer 而不是
System.Timers.Timer。Windows.Forms版本针对 UI 进行了优化。 -
您可能需要启动计时器
-
我不使用窗口表单。它正在浏览器中运行
-
Web 应用程序无法按照您认为的方式运行。每次向服务器发送请求时,页面对象都会被初始化和销毁。这意味着每次向服务器发送请求时都会执行 Page_Load。因此,当页面完成执行时,在那里创建的计时器将被销毁。您实际上无法像在 Windows 应用程序中那样让计时器在 Web 应用程序中工作。为了达到您的目的,您需要编写 JavaScript 代码,该代码将在一段时间后重复调用 Page Method。 page方法应该返回数据,JS应该显示数据。
标签: c# html asp.net timer repeat