在Winform应用程序中关闭表单时如何修复“ System.ObjectDisposedException”

时间:2019-01-09 07:21:22

标签: c# winforms opengl opentk formclosing

我想使用openTK在openGL中播放视频。一切正常。但是在关闭该特定窗体时,它将在代码“ while(glControl1.IsIdle)”下引发异常“ System.ObjectDisposedException:'无法访问已处置的对象。'”。我该如何解决? 我的应用程序包含一个“ Form1”。当用户单击按钮时,“ Form2”将作为新窗口打开。该Form2将在openGL中播放视频。

 private void Form2_Load(object sender, EventArgs e)
    {//openGL code
        StartCameras();
        glControl1.Resize += new EventHandler(glControl1_Resize);
        glControl1.Paint += new PaintEventHandler(glControl1_Paint);
        Application.Idle += Application_Idle;
        // Ensure that the viewport and projection matrix are set correctly.
        glControl1_Resize(glControl1, EventArgs.Empty);
    }
private void Application_Idle(object sender, EventArgs e)
    {
        while (glControl1.IsIdle)
        {
           Render();
        }
    }
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {        
        StopCameras();
    }
 private void StopCameras()
    {
        timer.Stop();
        videoSourcePlayer1.SignalToStop();
        videoSourcePlayer1.WaitForStop();           
    }

2 个答案:

答案 0 :(得分:0)

如何检查它是否被丢弃?

while (!glControl1.IsDisposed && glControl1.IsIdle)

假定它继承自WinForms Control类,则应实现IsDisposed

答案 1 :(得分:-2)

尝试一下是否可行。

    private void Application_Idle(object sender, EventArgs e) { 
    try {while (glControl1.IsIdle) 
{ 
Render(); 
} 
    }
    Catch(Exception ex)
    //print the ex
    }