嗨我有问题如何在f#的游戏循环中绘制面板 当我关闭应用程序时,我得到所有时间异常。
let rec gameLoop (gamePanel:Panel) = async {
lock gamePanel ( fun() ->
let graphics = gamePanel.CreateGraphics(); //<-exception
let rectangle = new System.Drawing.Rectangle(100, 100, 200, 200);
graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
)
return! gameLoop (gamePanel:Panel)
}
let startGame (p:Panel) (p1:Panel) = hide p; Async.StartAsTask(gameLoop p1);()
答案 0 :(得分:1)
你可能在另一个线程中处理gamePanel
,所以这个无限循环停止工作。你需要提供一种方法来向这个循环发信号通知它也应该退出。
我认为Panel
没有IsDisposed
方法,所以你应该将Panel
包装在你自己的某种游戏状态对象中,你可以跟踪游戏结束了。执行此操作的一种好方法是在对象中存储Panel option
类型:如果值为None
,则游戏结束,如果为Some panel
,则面板仍然有效并且可以使用。