问题标签 [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.
c# - 奇怪的 SerialPort 行为使应用程序崩溃
尝试通过 .NET 框架访问 SerialPort 时,我观察到一些奇怪的行为。我所做的是遍历所有可用的 com 端口,发送一个字符串,读取响应并关闭端口。目的是检查设备插入的端口。
现在奇怪的行为:有时应用程序会因 ObjectDisposedException 而崩溃,有时不会。这种观察的随机性以及我无法捕获 ObjectDisposedException 的事实使我相信问题必须发生在我无法控制的另一个线程中。
我的问题是:什么可能导致这个异常,我能做些什么来避免它?
这是我的小测试应用程序的完整代码,它在三分之二的试验中随机崩溃:
这也可能是我的计算机上的驱动程序问题,但是,我该怎么做才能避免该应用程序?我实际上可以赶上
AppDomain.CurrentDomain.UnhandledException(object sender, UnhandledExceptionEventArgs e)
但是然后e.ExceptionObject.IsTerminating
是true
并且应用程序无论如何都会关闭......
编辑:
正如我所说,我无法直接捕获异常,我在这里发布的是传递给AppDomain.CurrentDomain.UnhandledException
事件的异常对象的堆栈跟踪。我可以记录这个,但由于这个异常对象IsTerminating
,我不能用它做任何有用的事情。
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)
而不是通过局部视图调用它,它会完美运行。-
所以该调用和控制器之间一定有问题,但我无法指出是什么。知道如何进一步调试和/或解决问题吗?
有人问:
数据访问层:
在控制器中:
c# - 谁拥有 .NET 中的包装流(例如 TextWriter)?
我最近遇到了一个错误“ObjectDisposedException:无法访问关闭的流”
使用以下格式的代码时:
所以造成异常是因为TextWriter的Dispose对被包装的Stream(hashStream)进行了Dispose。我的问题是:
此约定是否适用于 .NET中的所有流(使用默认构造函数/参数) ?
是否有佳能讨论这种资源使用模式?例如,是否可以假设 CryptoStream 会关闭 MemoryStream?我知道答案,并且还有其他专门针对此的问题,但如果有的话,我希望根据设计指南来解决。
这种行为记录在哪里?
我找不到在
TextWriter(stream)
orCryptoStream
构造函数中讨论的“所有权”——当然我只是在看错误的位置。(更新:显然我阅读失败,正如 itsme86所指出的,这记录在 TextWriter 构造函数文档中。)编写此类代码的普遍接受的方法是什么?
也就是说,需要读取底层流(在所有操作结束时,因此仍然打开),而所有嵌套流应该完全关闭/刷新-例如,简单的CryptoStream.Flush是不够的。
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, OrderedPartCollection
1 documentCodecs) --- End of inner exception stack trace --- at Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection
1 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.WrappedAsyncResultBase
1. 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary
2 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.WrappedAsyncResultBase
1.在 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.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.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.WrappedAsyncResultBase
1.在 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.WrappedAsyncResultBase
1.在 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, OrderedPartCollection
1 documentCodecs) --- End of inner exception stack trace --- at Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator, OrderedPartCollection
1 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.WrappedAsyncResultBase
1. 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary
2 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.WrappedAsyncResultBase
1.在 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.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.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.WrappedAsyncResultBase
1.在 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.WrappedAsyncResultBase
1.在 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 文件夹使用经过调整的版本进行更新以调试问题时,该站点最初会正常运行,可能是因为应用程序已重置。
c# - 通过客户端请求关闭服务器以导致 ObjectDisposedException 的意外递归结束
我正在尝试使用 Sockets,并构建了一个相当简单的 TCP 服务器。
此处提供代码:http: //pastebin.com/zLRaBc0q
我在从客户端停止 Socket 服务器时遇到问题。在 pastebin 中,start on line 136
to192
是服务器终止的处理程序。
背后的逻辑相当简单:
- 断开请求的客户端;
- 从连接的客户端列表中删除客户端;
- 断开并删除其余的客户端;
- 关闭服务器;
- 从列表中删除服务器。
该程序完美地执行了上述内容,但它以某种方式设法在它的末尾挤进了一个额外的步骤 - 似乎意外执行ReceiveCallback
(好吧,这对我来说是意外的),然后以ObjectDisposedException
for line结束100
:
显然,它在关闭过程中无法访问client
。这里的问题是,我不明白为什么程序甚至ReceiveCallback
再次进入。我在处理退出消息后返回 void而不启动另一个调用它。
值得一提的是,只有当有两个客户端连接时才会发生这种情况。对于一个客户,它会毫无问题地停止。
尽管如此,(对我而言)描绘的是,它不是以requesting client
结尾ObjectDisposedException
,而是以另一个结尾。这仍然对我没有帮助,因为无论如何,我不明白为什么ReceiveCallback
再次调用 - 客户端已断开连接,应该在我停止服务器之前将其标记为这样。
如何使服务器停止而没有ObjectDisposedException
?
PS对我来说,括号只是旁注。由于我是异步 + 线程的新手,我不明白某些行为是如何发生的。
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()
如上所示,派系二认为它们是不必要的并且想要取消它们。
这两种观点我都看到了优点,我无法真正下定决心。意见?
.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 个警告。
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()?
c# - 无法访问 Program.cs Main 方法上的已处置对象
我有一个WinForm
有两种不同形式的应用程序。如果第一个命令行参数是"download",则Download
应该出现该表单。我得到了ObjectDisposedException
关于我的程序方法的Application.Run(new Download(args));
在线信息。Main
更新: 异常堆栈跟踪
c# - ObjectDisposedException,即使我正在使用 .Include()、.ToList() 和其他所有内容
我的项目是 C# .NET、MVC 5、EF6。我正在ObjectDisposedException
使用从数据库中获取的视图中的对象。我可能已经阅读了所有类似的问题,但.Include()
不起作用;我认为这个问题与延迟加载没有任何关系。
控制器方法:
我试过让 using 语句不环绕视图,我试过questionGroupWithLinks
在不同的地方声明,我试过迭代questionGroupWithLinks
并分配它的一个属性,希望它能加载它(没有任何区别,因为问题只出在视图中。只要您在控制器方法中,它就会一直加载),我也尝试了其他方法。
视图(简化):
我尝试使用Model.First()
来访问问题组而不是foreach
,但这没有任何区别。
让我知道我是否可以澄清任何事情或发布更多信息。