F#线程对象已处理异常
嗨,我有问题如何在游戏循环的面板上画f# 当我关闭应用程序时,我会收到所有时间的异常F#线程对象已处理异常,f#,F#,嗨,我有问题如何在游戏循环的面板上画f# 当我关闭应用程序时,我会收到所有时间的异常 let rec gameLoop (gamePanel:Panel) = async { lock gamePanel ( fun() -> let graphics = gamePanel.CreateGraphics(); //<-exception let rectangle = new System.Drawing.Rectangl
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);()
let rec gameLoop(gamePanel:Panel)=异步{
锁定游戏面板(乐趣()->
让graphics=gamePanel.CreateGraphics();//您可能正在另一个线程中处理gamePanel
,因此此无限循环停止工作。您需要提供一种方法来向此循环发送信号,表明它也应该退出
我认为Panel
没有IsDisposed
方法,因此您可能应该将Panel
封装在您自己的某种游戏状态对象中,以便跟踪游戏是否已完成。这样做的一个好方法是在对象中存储Panel选项
类型:如果值为None
游戏结束,如果是“代码>某个面板< /代码>,则该面板仍然有效,可以使用。可以考虑将取消令牌传递给Asian.StasTaskAt,并使用令牌来停止游戏循环;参见取消取消TokSoSurCE。<代码>静态成员SistTaskAs:Asianc