Pri*_*ton 1 .net c# timer winforms .net-4.5
在TimerWinforms中类有一个属性,Interval它
获取或设置Tick事件相对于Tick事件的最后一次出现之前的时间(以毫秒为单位).
在我的表单上,我有一个文本框,用户可以在几分钟内输入他们想要设置计时器的时间.
但是我无法使用我所做的功能将分钟转换为毫秒:
public static double ConvertMinutesToMilliseconds(double minutes)
{
return TimeSpan.FromMinutes(minutes).TotalMilliseconds;
}
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
if (result1 == DialogResult.Yes)
{
Timer tm;
tm = new Timer();
tm.Interval = int.Parse(textBox2.Text);
tm.Interval = ConvertMinutesToMilliseconds(tm.Interval);
tm.Tick += new EventHandler(button1_Click);
string pastebuffer = DateTime.Now.ToString();
pastebuffer = "### Edited on " + pastebuffer + " by " + txtUsername.Text + " ###";
Clipboard.SetText(pastebuffer);
tm.Start();
}
Run Code Online (Sandbox Code Playgroud)
我的错误是:无法将类型'double'隐式转换为'int'.存在显式转换(您是否错过了演员?)
System.Windows.Forms.Timer.Interval是类型int- 它有点混乱,因为System.Timers.Timer.Interval是类型double.因此,您尝试将方法(a double)的结果分配给类型的属性int.那不行.你当然可以施展:
timer.Interval = (int) ConvertMinutesToMilliseconds(...);
Run Code Online (Sandbox Code Playgroud)
但是,我借此机会稍微重构一下你的代码.最初你要分配分钟值timer.Interval,这在单位方面是错误的.你只是有效地使用它作为一个临时变量 - 所以要更清楚,并尝试使用"在声明点分配"以便清楚:
if (result1 == DialogResult.Yes)
{
// TODO: Use int.TryParse to handle invalid input
int minutes = int.Parse(textBox2.Text);
Timer timer = new Timer
{
// I don't actually think it's worth having a method for this...
Interval = (int) TimeSpan.FromMinutes(minutes).TotalMilliseconds
}
// Use method group conversion instead of new EventHandler(...)
// TODO: Rename button1_Click to a name which says what it actually does
timer.Tick += button1_Click;
// Interpolated strings make life simpler
Clipboard.SetText($"### Edited on {DateTime.Now} by {txtUsername.Text} ###");
timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
然后你只需要担心(如果我没记错的话)保持对计时器实例的引用,这样它就不会被垃圾收集.所以你可能想要某种"活跃计时器列表".我可能错误地记住了这一点,但你可能还是想保留这个列表,这样你就可以在适当的时候停止所有活动的计时器.
| 归档时间: |
|
| 查看次数: |
10675 次 |
| 最近记录: |