将分钟转换为毫秒

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'.存在显式转换(您是否错过了演员?)

Jon*_*eet 7

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)

然后你只需要担心(如果我没记错的话)保持对计时器实例的引用,这样它就不会被垃圾收集.所以你可能想要某种"活跃计时器列表".我可能错误地记住了这一点,但你可能还是想保留这个列表,这样你就可以在适当的时候停止所有活动的计时器.