我的一段程序,用于在桌面绘制图形。如下:  void DrawDiffer()
{
            //IntPtr hDCDesktop = GetDC(IntPtr.Zero);      // 用这个时也会返回0。 语句A
            IntPtr hDCDesktop = CreateDC("DISPLAY", null, null, IntPtr.Zero);   // 改为这个后也还是返回0。语句B              if(hDCDesktop == IntPtr.Zero)           // 为了防止出错,我后来增加的。语句C            return;             Graphics g = Graphics.FromHdc(hDCDesktop);      // 可是居然....。最糟糕的是居然能运行到这里。语句D            for (int i = 0; i < m_nDifferNums; i++)
            {
                g.DrawEllipse(m_penLeft, m_arrLeftRectDiffer);
                g.DrawEllipse(m_penRight, m_arrRightRectDiffer);
            }            m_bClearDifferImage = false;             //g.ReleaseHdc(hDCDesktop);    // 这个会出错,所以注释掉。语句E
            g.Dispose();
 } 大部分时候没有出错,可是一段时间后就会出错,用语句A或者语句B都出现过同样的错误,原来是没有语句C的,运行发生错误时运行到语句D,发现hDCDesktop是null。后来加了语句C,发现还是出错,而且居然还是运行到语句D,发现hDCDesktop还是null。语句C难道拦截不到,怎么样写hDCDesktop才不会出现返回null的情况啊?