问题描述:
在写winform程序时遇到“无法访问已释放的资源”的问题。程序中定义了一个System.Timers.Timer m_Timer,用来每1秒将获取到的数据显示在页面的DataGridView上,关闭程序时显示“无法访问已时发的资源。
问题分析:
从报错的信息看,因为关闭页面时,释放了页面的资源,这时候再往DataGridView写数据会导致无法访问已经释放的资源。
解决方法:
1, 在关闭窗口的时候,释放m_Timer
if (m_Timer != null)
{
m_Timer.Stop();
m_Timer.Dispose();
m_Timer = null;
}
2,在往datatgridview写数据的时候,先判断页面有没有被释放。
//判断当前页面的句柄是不是存在,句柄是页面唯一的标识,
//看页面有没有被释放
if (this.IsHandleCreated && !this.IsDisposed)
{
//跨线程访问UI线程使用Invoke
this.Invoke((Action)(() =>
{
//更新datagridview的代码
}));
}