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

嗨,我有问题如何在游戏循环的面板上画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);()
let rec gameLoop(gamePanel:Panel)=异步{
锁定游戏面板(乐趣()->

让graphics=gamePanel.CreateGraphics();//您可能正在另一个线程中处理
gamePanel
,因此此无限循环停止工作。您需要提供一种方法来向此循环发送信号,表明它也应该退出


我认为
Panel
没有
IsDisposed
方法,因此您可能应该将
Panel
封装在您自己的某种游戏状态对象中,以便跟踪游戏是否已完成。这样做的一个好方法是在对象中存储
Panel选项
类型:如果值为
None游戏结束,如果是“代码>某个面板< /代码>,则该面板仍然有效,可以使用。

可以考虑将取消令牌传递给Asian.StasTaskAt,并使用令牌来停止游戏循环;参见取消取消TokSoSurCE。<代码>静态成员SistTaskAs:Asianc