问题标签 [objectdisposedexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1593 浏览

c# - 奇怪的 SerialPort 行为使应用程序崩溃

尝试通过 .NET 框架访问 SerialPort 时,我观察到一些奇怪的行为。我所做的是遍历所有可用的 com 端口,发送一个字符串,读取响应并关闭端口。目的是检查设备插入的端口。

现在奇怪的行为:有时应用程序会因 ObjectDisposedException 而崩溃,有时不会。这种观察的随机性以及我无法捕获 ObjectDisposedException 的事实使我相信问题必须发生在我无法控制的另一个线程中。

我的问题是:什么可能导致这个异常,我能做些什么来避免它?

这是我的小测试应用程序的完整代码,它在三分之二的试验中随机崩溃:

这也可能是我的计算机上的驱动程序问题,但是,我该怎么做才能避免该应用程序?我实际上可以赶上 AppDomain.CurrentDomain.UnhandledException(object sender, UnhandledExceptionEventArgs e)但是然后e.ExceptionObject.IsTerminatingtrue并且应用程序无论如何都会关闭......

编辑:

正如我所说,我无法直接捕获异常,我在这里发布的是传递给AppDomain.CurrentDomain.UnhandledException事件的异常对象的堆栈跟踪。我可以记录这个,但由于这个异常对象IsTerminating,我不能用它做任何有用的事情。

0 投票
1 回答
245 浏览

c# - “ObjectContext 已被处理”/多控制器视图

-

当这个 Html.Action 被调用时,我得到The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

这是我通常能够.Include()在代码中的适当位置使用来修复的错误。

但在这种情况下:

  • 在调试时,它看起来不像“东西”或包含的子实体已被处置。
  • 我可以设置断点,@Html.Action("someAction", "someOtherController", thing)但如果我在方法的第一行设置断点someAction(...),则永远无法到达。
  • 我有另一个页面使用这种局部视图,它工作得很好
  • 如果我生成内容@Html.Action("someAction", "someOtherController", thing)而不是通过局部视图调用它,它会完美运行。-

所以该调用和控制器之间一定有问题,但我无法指出是什么。知道如何进一步调试和/或解决问题吗?


有人问:

数据访问层:

在控制器中:

0 投票
2 回答
454 浏览

c# - 谁拥有 .NET 中的包装流(例如 TextWriter)?

我最近遇到了一个错误“ObjectDisposedException:无法访问关闭的流”

使用以下格式的代码时:

所以造成异常是因为TextWriter的Dispose对被包装的Stream(hashStream)进行了Dispose。我的问题是:

  1. 此约定是否适用于 .NET中的所有流(使用默认构造函数/参数) ?

    是否有佳能讨论这种资源使用模式?例如,是否可以假设 CryptoStream 会关闭 MemoryStream?我知道答案,并且还有其他专门针对此的问题,但如果有的话,我希望根据设计指南来解决。

  2. 这种行为记录在哪里?

    我找不到在TextWriter(stream)orCryptoStream构造函数中讨论的“所有权”——当然我只是在看错误的位置。(更新:显然我阅读失败,正如 itsme86所指出的,这记录在 TextWriter 构造函数文档中。)

  3. 编写此类代码的普遍接受的方法是什么?

    也就是说,需要读取底层流(在所有操作结束时,因此仍然打开),而所有嵌套流应该完全关闭/刷新-例如,简单的CryptoStream.Flush是不够的。

0 投票
0 回答
666 浏览

asp.net-mvc-4 - RavenDB - EmbeddableDocumentStore 已处置或 NRE

这个问题是关于在 ASP.Net MVC 应用程序的生命周期中创建 Raven 文档存储的单个实例,然后为每个请求使用新的 IDocumentSession 来为客户端提供服务。我相信已遵循http://ravendb.net/kb/3/using-ravendb-in-an-asp-net-mvc-website中描述的推荐程序,一旦部署站点,我仍然会遇到错误。

我的代码如下所示。HepApp 类包含文档存储并由应用程序引用:

我的 MVC 控制器:

应用程序类 Global.asax 绑定到:

当应用程序启动时,文档存储应该被初始化并在应用程序的剩余生命周期中存在。对于每个请求,都会创建一个新的 Session 对象。至少,是这样的想法。相反,在 OnActionExecuting 中发生空引用错误(尽管我怀疑 HomeController.Init 方法,但它没有出现在堆栈上)或 EmbeddableDocumentStore 对象被报告为已经处置。令人困惑的是,这些错误仅在应用程序运行一段时间后才会出现,这可能表明这是应用程序池回收问题

编辑:错误有所不同,但似乎都表明数据库存储的实例化存在问题:

[EsentFileAccessDeniedException:无法访问文件,文件已锁定或正在使用] [InvalidOperationException:无法写入位置:\192.168.0.100\localuser\x\App_Data/Raven。确保您对此路径具有读/写权限。]

System.InvalidOperationException:无法写入位置:\192.168.0.100\localuser\x\App_Data/Raven。确保您对此路径具有读/写权限。---> Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException:无法访问文件,文件在 Microsoft.Isam.Esent.Interop.Api.Check(Int32 err) 在 Microsoft.Isam.Esent.Interop 被锁定或正在使用。 Api.JetInit(JET_INSTANCE& 实例) 在 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection1 documentCodecs) --- End of inner exception stack trace --- at Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection1 documentCodecs) 在 Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration 配置, TransportState transportState) 在 Raven.Client.Embedded.EmbeddableDocumentStore.InitializeInternal() 在 Raven.Client.Document.DocumentStore.Initialize() 在 HEPlaceHolder.HepApp.get_DB( ) 在 e:\projects\HEPlaceHolder\HEPlaceHolder\Logic\HepApp.cs:line 27 at HEPlaceHolder.Controllers.HomeController.OnActionExecuting(ActionExecutingContext filterContext) 在 e:\projects\HEPlaceHolder\HEPlaceHolder\Controllers\HomeController.cs:line 31 at System.Web.Mvc.Controller.System.Web.Mvc.IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.InvokeActionMethodFilterAsynchronouslyRecursive(Int32 filterIndex) 在 System.Web.Mvc.Async。AsyncControllerActionInvoker.<>c__DisplayClass33.b__31(AsyncCallback asyncCallback, Object asyncState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1. 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList 1 filters, ActionDescriptor actionDescriptor, IDictionary2 parameters, AsyncCallback callback, Object state) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker 开始(AsyncCallback 回调,对象状态,Int32 超时)。 <>c__DisplayClass21.b__19(AsyncCallback asyncCallback, Object asyncState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) 在 System.Web.Mvc.Controller.b__1c(AsyncCallback) 开始(AsyncCallback 回调,对象状态,Int32 超时) asyncCallback,对象 asyncState,ExecuteCoreState innerState)在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.Begin(AsyncCallback 回调,对象状态,Int32 超时)在 System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback 回调,对象状态)在 System.Web.Mvc.Controller.b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) 在 System.Web.Mvc.Controller.System.Web.Mvc.Async 开始(AsyncCallback 回调,对象状态,Int32 超时)。 IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at System.Web.Mvc.MvcHandler.b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback 回调, 对象状态) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback 回调中的开始(AsyncCallback 回调, 对象状态, Int32 超时),对象状态)在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

[ObjectDisposedException:文档存储已被释放,无法使用对象名称:'EmbeddableDocumentStore'。] Raven.Client.DocumentStoreBase.EnsureNotClosed() +82 System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback,对象状态,Int32 超时)+128

[NullReferenceException:对象引用未设置为对象的实例。] e:\projects\HEPlaceHolder\HEPlaceHolder\Controllers\HomeController.cs:31 System.Web.Mvc.Controller 中的 HEPlaceHolder.Controllers.HomeController.OnActionExecuting(ActionExecutingContext filterContext) .System.Web.Mvc.IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) +10

System.InvalidOperationException:无法打开事务存储:\192.168.0.100\localuser\x\App_Data/Raven\Data ---> Microsoft.Isam.Esent.Interop.EsentTempPathInUseException:临时路径已被 Microsoft.Isam 的另一个数据库实例使用.Esent.Interop.Api.Check(Int32 err) 在 Microsoft.Isam.Esent.Interop.Api.JetInit(JET_INSTANCE& 实例) 在 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection1 documentCodecs) --- End of inner exception stack trace --- at Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection1 documentCodecs) 在 Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration 配置, TransportState transportState) 在 Raven.Client.Embedded.EmbeddableDocumentStore.InitializeInternal() 在 Raven.Client.Document.DocumentStore.Initialize() 在 HEPlaceHolder.HepApp.get_DB( ) 在 e:\projects\HEPlaceHolder\HEPlaceHolder\Logic\HepApp.cs:line 27 at HEPlaceHolder.Controllers.HomeController.OnActionExecuting(ActionExecutingContext filterContext) 在 e:\projects\HEPlaceHolder\HEPlaceHolder\Controllers\HomeController.cs:line 31 at System.Web.Mvc.Controller.System.Web.Mvc.IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.InvokeActionMethodFilterAsynchronouslyRecursive(Int32 filterIndex) 在 System.Web.Mvc.Async。AsyncControllerActionInvoker.<>c__DisplayClass33.b__31(AsyncCallback asyncCallback, Object asyncState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1. 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList 1 filters, ActionDescriptor actionDescriptor, IDictionary2 parameters, AsyncCallback callback, Object state) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker 开始(AsyncCallback 回调,对象状态,Int32 超时)。 <>c__DisplayClass21.b__19(AsyncCallback asyncCallback, Object asyncState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) 在 System.Web.Mvc.Controller.b__1c(AsyncCallback) 开始(AsyncCallback 回调,对象状态,Int32 超时) asyncCallback,对象 asyncState,ExecuteCoreState innerState)在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.Begin(AsyncCallback 回调,对象状态,Int32 超时)在 System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback 回调,对象状态)在 System.Web.Mvc.Controller.b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) 在 System.Web.Mvc.Controller.System.Web.Mvc.Async 开始(AsyncCallback 回调,对象状态,Int32 超时)。 IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at System.Web.Mvc.MvcHandler.b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback 回调, 对象状态) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback 回调中的开始(AsyncCallback 回调, 对象状态, Int32 超时),对象状态)在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

编辑:每当 bin 文件夹使用经过调整的版本进行更新以调试问题时,该站点最初会正常运行,可能是因为应用程序已重置。

0 投票
1 回答
254 浏览

c# - 通过客户端请求关闭服务器以导致 ObjectDisposedException 的意外递归结束

我正在尝试使用 Sockets,并构建了一个相当简单的 TCP 服务器。

此处提供代码:http: //pastebin.com/zLRaBc0q

我在从客户端停止 Socket 服务器时遇到问题。在 pastebin 中,start on line 136to192是服务器终止的处理程序。

背后的逻辑相当简单:

  • 断开请求的客户端;
  • 从连接的客户端列表中删除客户端;
  • 断开并删除其余的客户端;
  • 关闭服务器;
  • 从列表中删除服务器。

该程序完美地执行了上述内容,但它以某种方式设法在它的末尾挤进了一个额外的步骤 - 似乎意外执行ReceiveCallback(好吧,这对我来说是意外的),然后以ObjectDisposedExceptionfor line结束100

显然,它在关闭过程中无法访问client。这里的问题是,我不明白为什么程序甚至ReceiveCallback再次进入。我在处理退出消息后返回 void而不启动另一个调用它。

值得一提的是,只有当有两个客户端连接时才会发生这种情况。对于一个客户,它会毫无问题地停止。

尽管如此,(对我而言)描绘的是,它不是以requesting client结尾ObjectDisposedException,而是以另一个结尾。这仍然对我没有帮助,因为无论如何,我不明白为什么ReceiveCallback再次调用 - 客户端已断开连接,应该在我停止服务器之前将其标记为这样。

如何使服务器停止而没有ObjectDisposedException

PS对我来说,括号只是旁注。由于我是异步 + 线程的新手,我不明白某些行为是如何发生的。

0 投票
3 回答
1469 浏览

c# - C# IDisposable 模式和抛出 ObjectDisposedException

给大家一个问题。

在我的公司,我们正在开发一个在 Microsoft 的 MVC 框架内运行的应用程序。我们正在实现的控制器类继承自MVC 基类 Controller。例子:

我们在团队中的讨论围绕 Dispose() 模式展开。本质上,这涉及实现 IDisposable 接口,最好根据 Microsoft 认可的模式。

例如,请参阅此链接:http: //msdn.microsoft.com/en-us/library/fs2xkftw%28v=vs.110%29.aspx

有趣的是,我们的控制器类不拥有任何资源,无论是托管的还是托管的。这样一来,Dispose(bool) 的实现就大大简化了:

关于IsDisposed属性的使用(或需要)存在一些分歧,用于以下方法:

然后在每个执行“实际”工作的方法开始时调用此方法。这里的想法是不应再次使用已处理的对象,因此它应该抛出 ObjectDisposedException。另一种观点是,由于Dispose(bool)“什么都不做”(除了设置IsDisposed属性和调用Dispose(bool)基类),“已处理”对象并不是真正处于不可用状态,因此没有理由抛出。因此,甚至没有理由实施Dispose(bool).

反对这一点的一个论点是 MyController 应该在它被释放并调用它的一个方法时抛出,以便在将来的版本中添加托管和/或非托管资源时它的行为不会改变。

反对最后一点的论点是 MyController 不应该在将来的版本中添加任何资源,而是应该从将来需要添加资源的情况下派生出来。另一个问题是:为什么(库)类 Controller 不实现ThrowIfDisposed()或类似的东西?

因此,总而言之,派系一想要实施Dispose(bool)ThrowIfDisposed()如上所示,派系二认为它们是不必要的并且想要取消它们。

这两种观点我都看到了优点,我无法真正下定决心。意见?

0 投票
1 回答
963 浏览

.net - 警告:不要多次处理对象

编辑:

这个问题不是重复的!,也许是一个常见的问题“这个警告是什么意思? ”但是当我问如何在特定代码中修复警告时不是重复的,而且我自己也不知道警告的意义。–


VS 中的代码分析向我显示了这个警告:

CA2202 不要多次处理对象 对象“OutputStream”可以在方法“FileSplitter.Split(String, Long, String, String, Boolean, Boolean)”中多次处理。为避免生成 System.ObjectDisposedException,您不应在对象上多次调用 Dispose。:行:490 WindowsApplication1 FileSplitter.vb 490

这条线490是这样的:

它给了我对 line 中的另一个对象同样的警告498,这个:

但我认为我正确使用了Using关键字并且我不会多次处理对象,如果我做错了什么,那么我该如何修复我的代码?

这是完整的块:

更新

添加 try/catch 块后,它仍然显示相同的警告。如果我删除最后一次尝试/捕获,它只会显示 1 个警告。

0 投票
1 回答
1706 浏览

asp.net-mvc - vNext. AspNet.Identity and custom UserStore. UserStore disposed exception

I'm trying to understand vNext.
I wrote custom UserStore, that works with MongoDB and implements these interfaces:

In Startup.cs added:

Then tried to use unchanged AccountController from Visual Studio template and have troubles.
When signing in i getting ObjectDisposedException in UserStore.FindByNameAsync() -- something called UserStore.Dispose().
In UserManager code on github.com/aspnet Store.Dispose() called only in UserManager.Dispose().
I can just ignore calls of Dispose and all works fine, but this is not good way.
So i have no ideas what shall i do

P.S. The Question is: what (and why) can call UserStore.Dispose()?

0 投票
2 回答
2576 浏览

c# - 无法访问 Program.cs Main 方法上的已处置对象

我有一个WinForm有两种不同形式的应用程序。如果第一个命令行参数是"download",则Download应该出现该表单。我得到了ObjectDisposedException关于我的程序方法的Application.Run(new Download(args));在线信息。Main

在此处输入图像描述

更新: 异常堆栈跟踪

0 投票
1 回答
1001 浏览

c# - ObjectDisposedException,即使我正在使用 .Include()、.ToList() 和其他所有内容

我的项目是 C# .NET、MVC 5、EF6。我正在ObjectDisposedException使用从数据库中获取的视图中的对象。我可能已经阅读了所有类似的问题,但.Include()不起作用;我认为这个问题与延迟加载没有任何关系。

控制器方法:

我试过让 using 语句不环绕视图,我试过questionGroupWithLinks在不同的地方声明,我试过迭代questionGroupWithLinks并分配它的一个属性,希望它能加载它(没有任何区别,因为问题只出在视图中。只要您在控制器方法中,它就会一直加载),我也尝试了其他方法。

视图(简化):

我尝试使用Model.First()来访问问题组而不是foreach,但这没有任何区别。

让我知道我是否可以澄清任何事情或发布更多信息。