jjzjj

idisposable

全部标签

c# - 为什么 IDisposable 实现是这样设计的

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。Improvethisquestion让我们来看看臭名昭著的IDisposable接口(interface):[ComVisible(true)]publicinterfaceIDisposable{voidDispose();}和一个典型的实现,如MSDN所推荐的(我省略了当前对象是否已经被释放的检查):publicclassBase:IDisposable{protectedvirtualvoidDispose(booldisposing

C# 使用 IDisposable 还是 SafeHandle?

我已经阅读了很多有关C#中的终结器和IDisposable的内容。当我终于从对终结器和IDisposable的巨大困惑中清醒过来时,突然间,不知从哪里冒出来了这个SafeHandle东西。我的信念再次彻底动摇了。我应该使用什么? 最佳答案 SafeHandle仅在处理Win32Interop调用时有用。在Win32中,大多数东西都是用“句柄”来表示的。这包括Windows、Mutexes等。因此.NETSafeHandle使用一次性模式来确保正确关闭Win32句柄。因此,如果您正在使用Win32Interop调用并取回Win32句柄

c# - "opening a connection"实际上是什么意思?

我试图向某人解释为什么数据库连接实现IDisposable,当我意识到我真的不知道“打开连接”实际上是什么意思时。所以我的问题是-c#在打开连接时实际上做了什么?谢谢你。 最佳答案 实际上有两个类涉及实现连接(实际上更多,但我正在简化)。其中之一是IDbConnection您在代码中使用的实现(SQLConnection、NpgsqlConnection、OracleConnection等)。另一个是程序集内部的“真实”连接对象,对您的代码不可见。我们暂时将其称为“RealConnection”,尽管其实际名称因不同的实现而异(例如

c# - 有效关闭 WCF 4 channel 的正确方法

我正在使用以下方法关闭WCF4channel。这是正确的做法吗?using(IServicechannel=CustomChannelFactory.CreateConfigurationChannel()){channel.Open();//dostuff}//channelsdisposesoff?? 最佳答案 在WCF的“早期”,这曾经是普遍接受的发布WCF客户端代理的方式。然而事情已经发生了变化。原来执行IClientChannel.Dispose()简单地调用IClientChannel.Close()方法,在某些情况下可

c# - 如果它是 IDisposable,我可以 "inline"变量吗?

我是否必须这样做才能确保正确处理MemoryStream?using(MemoryStreamstream=newMemoryStream(bytes))using(XmlReaderreader=XmlReader.Create(stream)){returnnewXmlDocument().Load(reader);}或者是否可以内联MemoryStream使其超出范围?像这样?using(XmlReaderreader=XmlReader.Create(newMemoryStream(bytes))){returnnewXmlDocument().Load(reader);}

c# - 异步世界中的故障安全处置

在同步世界中,C#使一次性管理所有事物变得非常容易:using(IDisposablesomeDisposable=bla.bla()){//doourbidding}//don'tworrytoomuchaboutit但是,当我们使用异步时,我们不再享受usingblock带来的便利。我遇到的最好的策略之一是CCRiterator这允许我们使用异步代码“就好像它是同步的”。这意味着我们可以将usingblock保留在迭代器处理程序中,而不会陷入何时处理和捕获所有需要处理的情况的复杂决定中。但是,在许多情况下,调用CCR似乎有点矫枉过正,老实说,虽然我对CCR很满意,但对于外行来说,它

c# - 在 IDisposable 类层次结构中正确处理 ObjectDisposedException

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.3年前关闭。Improvethisquestion正确实现IDisposable时,大多数实现,包括框架指南,都建议包含privatebooldisposed;成员,以便安全地允许多次调用Dispose(),Dispose(bool)以及扔ObjectDisposedException在适当的时候。这适用于单个类。但是,当您从一次性资源进行子类化,并且子类包含它自己的native资源和独特的方法时,事情就会变得有点棘手。大多数示例展示了如何覆盖Dipos

c# - 我什么时候可以处理 IDisposable WPF 控件,例如Windows 窗体主机?

WPF控件WindowsFormsHost继承自IDisposable。如果我有一个包含上述某些控件的复杂WPF可视化树,我可以使用什么事件或方法在关闭期间调用IDispose? 最佳答案 在应用程序关闭的情况下,您无需执行任何操作即可正确处理WindowsFormsHost。由于它派生自HwndHost,因此在Dispatcher关闭时处理处理。如果您使用Reflector,您会看到在初始化HwndHost时它会创建一个WeakEventDispatcherShutdown。如果您在对话框中使用它,我建议的最好的办法是覆盖OnCl

c# - 通过 using block 使用进程

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhathappensifIdon'tcloseaSystem.Diagnostics.ProcessinmyC#consoleapp?由于System.Diagnostics.Process继承自实现IDisposable的Component,我是否应该始终创建一个Process使用usingblock?例如,这个...:using(varprocess=newProcess()){process.StartInfo.FileName="someprocess.exe";process.Start();pr

c# - 如何在 WPF 中使用一次性 View 模型?

如果View模型引用非托管资源或具有事件处理程序(例如在调度程序计时器上处理已过),我如何确保View模型被正确处理。在第一种情况下,终结器是一个选项,虽然不理想,但在后者中,它永远不会被调用。我们如何判断何时不再有View附加到View模型。 最佳答案 我通过执行以下操作实现了这一点:从App.xaml中删除StartupUri属性。按如下方式定义我的App类:publicpartialclassApp:Application{publicApp(){IDisposabledisposableViewModel=null;//Cr