我想使用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();
}
答案 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
}