Tag: 完成

Finalizer在其对象仍在使用时启动

总结: C#/ .NET应该是垃圾回收。 C#有一个析构函数,用于清理资源。 当一个对象A被垃圾收集在我试图克隆其变量成员之一的同一行时会发生什么? 显然,在多处理器上,垃圾收集器有时赢了…… 问题 今天,在关于C#的培训课程中,老师向我们展示了一些仅在多处理器上运行时才包含错误的代码。 我将总结一下,有时候,编译器或JIT通过在从被调用方法返回之前调用C#类对象的终结器来搞砸。 Visual C ++ 2005文档中给出的完整代码将作为“答案”发布,以避免提出非常大的问题,但必要的内容如下: 以下类具有“Hash”属性,该属性将返回内部数组的克隆副本。 在构造中,数组的第一项值为2.在析构函数中,其值设置为零。 关键是:如果你试图获得“示例”的“哈希”属性,你将得到一个干净的数组副本,其第一个项目仍然是2,因为正在使用该对象(因此,不是垃圾收集/定稿): public class Example { private int nValue; public int N { get { return nValue; } } // The Hash property is slower because it clones an array. When // KeepAlive is not used, the finalizer sometimes runs before […]

C#WPF – 等待加载页面

我在StackOverflow上看到了关于这个主题的几个线程,但是它们似乎都没有提供答案。 我有一个按钮,当点击它时,会打开一个不可见的网页,导航到一个URL,将信息输入一个框,按一个按钮,然后抓取屏幕以获取信息。 我的代码的骨头基本上在点击中: WebBrowser wb = new WebBrowser; wb.Visibility = System.Windows.Visibility.Hidden; wb.Navigate(“http://somepage.com”); 这就是它变得棘手的地方。 我正在寻找一种方法来确保在尝试输入数据或刮擦屏幕之前加载页面。 我已经看过几个讨论Navigated , IsLoaded , LoadCompleted以及BackgroundWork东西的线程,但是我无法使用其中的任何一个。 哪个是用于确定页面已完全加载的最佳选项? 您如何获得所选择的方法? 我也无法从屏幕上获取数据,因为WPF不使用相同的GetElementByID 。 编辑: 根据下面的评论,以下是我遇到的错误: 一旦页面被导航,首先导航,并且不一定等到所有对象都被加载。 这可以按预期工作,但不能用于我的目的。 IsLoaded永远不会返回true private void GetData_Click(object sender, RoutedEventArgs e) { int x=0; HTMLDocument doc; wb = new WebBrowser(); wb.Visibility = System.Windows.Visibility.Visible; wb.Navigate(“somesite.com”); doc = wb.Document as mshtml.HTMLDocument; while(!wb.IsLoaded) { //Wait […]