我使用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();
//...
}
//....
答案 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。