【发布时间】:2011-10-30 20:06:42
【问题描述】:
当我的线程完成时,我不断收到异常抛出。
我可以捕捉它们,但我宁愿我的代码先捕捉它们。
此代码适用于完整的 .Net Framework,但IsHandleCreated 在Compact Framework 下不存在。
问题: 我应该用什么来代替IsHandleCreated?
Control _parent; // set when custom BackgroundWorker like class is created
bool parentOk {
get {
if (_parent != null) {
if (!_parent.IsDisposed) {
return _parent.IsHandleCreated;
// Should I instead "return (_parent.Handle != IntPtr.Zero);"?
}
}
return false;
}
}
public void ReportProgress(int step, object data) {
lock (_thLock) {
if (parentOk && (ProgressChanged != null)) {
MethodInvoker methInvoker = delegate { ProgressChanged(step, data); };
try {
_parent.BeginInvoke(methInvoker); // recently changed from below
// _parent.Invoke(methInvoker); (old technique)
} catch (ObjectDisposedException) { // added for BeginInvoke
} catch (NullReferenceException err) {
Global.LogError(_CODEFILE + "ReportProgress", err);
} catch (InvalidOperationException err) {
Global.LogError(_CODEFILE + "ReportProgress", err);
}
}
}
}
【问题讨论】:
-
您到底看到了什么?是不是
IsDisposed是假的,但尝试在父级上调用仍然失败? -
它发生得太快了。当我的调试器得到它时,它并不存在。我得到的实际错误消息是
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
标签: c# .net windows-mobile compact-framework