无法确定应用程序关闭期间 System.ObjectDisposedException 的原因



我陷入了调试方案,我需要帮助了解如何获取有关应用程序所发生情况的更多信息。

当我关闭主窗体时,似乎在完全关闭之前的最后一点处理期间,会引发异常。

我得到以下两个例外之一,没有明显的原因为什么其中一个。 我可以简单地打开应用程序并立即关闭它。 将生成两者之一。 如果有问题,如果我专注于另一个正在运行的应用程序,返回我的应用程序,然后关闭它,#2 似乎更有可能。

异常 #1:

无法访问已释放的对象。
对象名称:"System.Net.Sockets.NetworkStream"。
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)

异常 #2:

安全手柄已关闭
System.Net.UnsafeNclNativeMethods.OSSOCK.WSAEventSelect(SafeCloseSocket socketHandle, IntPtr Event, AsyncEventBits NetworkEvents)

在我的应用程序中,套接字有两种直接用途。

1) 在BackgroundWorker上建立 UDPClient 侦听器。 只是我们在内部用来监视数据库命中的一个小东西。

2)一个HttpWebRequest,它调用我们的网站并获取一些信息。

这两个都已经玩了一段时间,没有问题,也没有改变,所以我怀疑他们没有罪。

由于这是一个客户端-服务器数据库应用程序,因此正在进行大量网络流量,并且数据库引擎可能是发生这种情况的地方。 我只是不知道,我需要帮助的地方。

数据包/流量嗅探器? Visual Studio 中的设置/设置以获取有关异常的更好信息? 你会如何追踪这个?

我假设你正在使用VisualStudio作为你的调试环境。

  • 点击菜单项"调试"
  • 单击菜单项"异常..."
  • 打开树项"公共语言运行库异常"
  • 打开树项"系统"
  • 向下滚动到"System.ObjectDisposedException"
  • 选中其复选框中的"抛出"
  • 点击"确定"
现在,当您调试时,它会在

引发该异常时中断,即使您没有在任何地方专门捕获它。

在适当的代码块周围添加一个try...catch,并处理这个太常见的异常,该异常通常不是真正的异常,而是正常的代码流事件。

例:

void OnReceiveFrom(IAsyncObject ar)
{
    try
    {
        // whatever you do
    }
    catch (ObjectDisposedException obex)
    {
        // log to debugging output window, just so you will know.
        Debug.WriteLine(String.Format("{0}: {1}: in OnRecieveFrom",
            obex.GetType().Name, obex.Message));
        // test some variable you set when your application is exiting.
        if (applicationIsShuttingDown)
            return;
        // but if it is unexpected, then re-throw it.
        throw;
    }
}

相关内容

  • 没有找到相关文章

最新更新