winform关闭时报异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

.Net技术 码拜 8年前 (2016-05-23) 1319次浏览
winform关闭时报异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏      public void start() {
pla.uiMode = “None”;
pla.URL = System.IO.Directory.GetCurrentDirectory() + “/动1.mp4”;
pla.stretchToFit = true;
pla.fullScreen = true;
pla.Ctlcontrols.play();
}
private void Form1_Activated(object sender, EventArgs e)
{
start();
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape) {
this.Dispose();
pla.Ctlcontrols.pause();
pla.Ctlcontrols.stop();
pla.close();
pla.Dispose();
pla.currentPlaylist.clear();
this.Close();
}
}
pla是windowsmideplayer控件,ESC键关闭代码如上,运行后报异常如最上,求高手帮忙讲解一下。此外,视频能正常出现,假如用form的关闭键也没有异常,但是用close方法就有如上异常。

引用
解决方案

10

把this.Dispose()放在this.Close()后面或去掉应该不会抛异常了吧

30

还不行的话,可以这样

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
         {
             if (e.KeyChar == (char)Keys.Escape) {
                 //this.Dispose();
                 //pla.Ctlcontrols.pause();
                 pla.Ctlcontrols.stop();
                 pla.close();
                 
                 Thread.Sleep(1000);
                 //pla.Dispose(); //pla已经close()了,就不要执行任何语句了
                 //pla.currentPlaylist.clear(); //这句可以放到pla.close()前,在这个位置肯定不行,删掉
                 this.Close();
             }
         }

10

你点击关闭按钮不报错是原因是关闭按钮仅仅使用了this.Close(),你也把其他诸如pla.close()什么的都去掉,只使用this.Close不就是了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform关闭时报异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
喜欢 (0)
[1034331897@qq.com]
分享 (0)