【发布时间】:2012-03-08 21:42:11
【问题描述】:
我正在开发一个每分钟显示一次随机电影报价的应用程序,但我无法让代码工作。
我正在使用一个包含标签的 UserControl 来显示报价,并且我想在它的 Page_Load 中实例化“报价”。构造函数启动一个计时器,该计时器每分钟调用一次随机引用的函数,并将其返回给 Page_Load 并在 Label.Text 中显示。
带有计时器的行给了我以下错误消息:“System.Timers.Timer”不包含接受 4 个参数的构造函数,这对我来说没有意义吗?
public class Quote {
List<string> movieQuote;
private string RandomQuote(object state) {
movieQuote.Add("quote1");
movieQuote.Add("quote2");
movieQuote.Add("quote3");
movieQuote.Add("quote");
Random randNr = new Random();
int aRandomPos = randNr.Next(1, movieQuote.Count);
string quote = movieQuote[aRandomPos];
return quote;
}
public Quote() {
movieQuote = new List<string>();
Timer timer = new Timer(RandomQuote, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
}
}
【问题讨论】:
-
您的
Timer问题不谈,您当前的代码永远不会选择第一个引号。 -
您的代码有几个问题(除了提出的问题)。您应该在构造函数中初始化一个
Random,并使用单个实例。您应该在构造函数中填写movieQuote,之后不要修改它。您应该生成一个从 0 到计数的随机数,而不是从 1 到计数。您有很多一次性使用的局部变量,消除这些可能会将您的RandomQuote方法放到一行中(尽管在多行中它可能更具可读性,您自己决定)。RandomQuote应该返回void并修改状态,因为任何返回值都会丢失。 -
@Anthony:嗯,这不是第一次,而且在随后的调用中发生的机会比其他调用要小。