Как исправить «System.ObjectDisposedException» при закрытии формы в приложении winform - PullRequest
0 голосов
/ 09 января 2019

Я хочу воспроизвести видео в openGL, используя openTK. Работает нормально. но при закрытии этой конкретной формы он выдает исключение «System.ObjectDisposedException:« Не удается получить доступ к удаленному объекту. »« под кодом «while (glControl1.IsIdle)». Как я могу решить это? Мое приложение содержит «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 голосов
/ 09 января 2019

Попробуйте, если это может сработать.

    private void Application_Idle(object sender, EventArgs e) { 
    try {while (glControl1.IsIdle) 
{ 
Render(); 
} 
    }
    Catch(Exception ex)
    //print the ex
    }
0 голосов
/ 09 января 2019

А как насчет проверки его утилизации?:

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

Предполагая, что он наследуется от класса WinForms Control, он должен реализовывать IsDisposed.

...