在mono下运行时,System.Windows.Forms.Timer事件根本不会触发

时间:2009-11-19 15:02:00

标签: c# .net linux mono

我使用monodevelop编译了我的应用程序。并尝试在Linux上使用mono运行。似乎System.Windows.Forms.Timer对象的tick事件永远不会触发。

它在Windows上没有问题,但在Linux中没有。

相关代码大致如下:

// derived from a From
//...
private Timer controlTimer;
//....
protected override OnCreateControl(/*...*/)
{
//,,,
    controlTimer=new Timer();
    controlTimer.Tick += new EventHandler(controlFunc);
    controlTimer.Interval = 40;
    controlTimer.Tag = this; // The form is used by the callback
    controlTimer.Start();
//...
}
//....

4 个答案:

答案 0 :(得分:1)

即使是最简单的winform应用程序也不会在mono ...

下运行计时器

但如果我将初始化放到form1_load然后将其添加到form.load事件中,它就会运行。

编辑:如果在方法的末尾放置了base.OnCreateControl(),则OnCreateControl正在工作。 在.NET上,它可以在没有那条线的情况下工作,并且之前也在单声道下工作......

所以它似乎是单声道的错误,我会报告它。

答案 1 :(得分:1)

尝试使用System.Timers而不是Windows.Forms.Timer

请参阅:Timer won't tick

也有很多来自Windows.Forms似乎根本没有在Mono中实现(例如Invoke)

为我修好了。

答案 2 :(得分:0)

使用mono 2.6 preview或最新的svn进行测试。如果它仍然不起submit a bug报告。

答案 3 :(得分:-1)

我建议在OnControlCreated方法中添加一个Console.WriteLine,以确保调用该方法并确实正在创建Timer。