【发布时间】:2012-05-16 06:46:50
【问题描述】:
当我尝试通过调度程序更新 UI 元素时,我收到一个错误,指出对象引用未设置为对象的实例。
示例代码是->
backgroundworker.DoWork += >
{
// do some work here.
// close the progressbar over here
_progressBar.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action( _progressBar.Close);
}
我收到一个错误 Object reference not set in the _progressBar.Dispatcher.Invoke 语句,我的应用程序完全挂起。
【问题讨论】:
-
"_progressBar.Close" 应该不带括号传递(如果这是您尝试调用的方法的名称)。
-
这里打错字了。我已经更正了!
-
_progressBar是如何定义和设置的?_progressBar似乎为空。 -
进度条是一个类级别的成员变量,当我调试时我可以在快速观察窗口中看到它指向一个实例,它指向一个实例:)-。在后台工作线程上调用 Dowork 后,我做了一个进度条 .showdialog ..
-
显然它不是 UI 元素或 ProgressBar,它必须是 Window 才能具有 Close() 方法。你不会在 DoWork 中编写这样的代码,它属于 RunWorkerCompleted 事件处理程序。
标签: c# .net multithreading backgroundworker