- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 WPF 应用程序中有一些代码如下所示:
public class MyTextBox : System.Windows.Controls.TextBox, IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
Dispatcher.BeginInvoke((Action) delegate
{
// do work on member variables on the UI thread.
});
}
~MyTextBox()
{
Dispose(false);
}
}
dispose 方法从未被显式调用,因此析构函数调用它。在这种情况下,对象似乎会在 BeginInvoke 中的委托(delegate)在 UI 线程上触发之前被销毁。它似乎正在工作。这里发生了什么?这样安全吗?
最佳答案
It seems like in this case the object would be destroyed before the delegate in the BeginInvoke fires on the UI thread
终结器队列用于 UI 消息循环。对象可能会在 UI 线程上调用实际委托(delegate)之前 完成其终结器方法的运行,但这并不重要,因为无论如何委托(delegate)都会排队。
What is happening here?
您正在将终结器中的工作排队到 UI。
Is this safe?
安全是一个广义的术语。我会这样做吗?当然不。从终结器调用对 UI 元素的操作看起来和感觉都很奇怪,特别是考虑到这是一个 TextBox
控件。我建议你完全掌握运行 finalizer guarantees 的内容并且不保证。一方面,运行终结器并不意味着对象会立即在内存中清理干净。
关于c# - 从析构函数调用 BeginInvoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484870/
我开始考虑在我 future 的项目或重构中实现控制反转容器,我想知道在正确设计依赖项时哪些原则(除了 GoF 模式)可能需要牢记在心。假设我需要构建一个简单的控制台应用程序,如果它可以访问互联网,它
假设我有一个 RxC contingency table 。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 “主效应”以及列的
我正在尝试使用 DKMS 为正在运行的内核 (4.4) 构 build 备树覆盖。我天真的 Makefile 如下: PWD := $(shell pwd) dtbo-y += my-awsome-o
我有一个 sencha touch 项目。我是用 phonegap 2.9 构建的,并且可以正常工作 device.uuid 返回到设备 ID。当我尝试使用 3.1 device.uuid 构建时抛出
我在安装了 Xcode 4.5.1 的 Mt Lion 上运行。 默认情况下,当我构建并部署到 iOS 5.1 设备时,显示会在我旋转设备时旋转,但当我部署到 iOS 6 模拟器或运行 iOS 的 i
我正在尝试使用 Google Analytics Reporting API v4 构建多折线图。 一张图表,其中我按每天的 session 计数为每个设备(台式机/平板电脑/移动设备)设置了一条线。
我一生都无法使用 xcode 组织者“自动设备配置”中的“团队配置配置文件”在 xcode 4.0.1 中将我的应用程序构建到我的 iPad 上。 该应用程序完美地构建到模拟器,但当我构建到 iPad
我是一名优秀的程序员,十分优秀!