当我的线程完成时,我不断收到抛出的异常。移动.Net下的测试控制句柄CF
我可以抓住他们,但我宁愿我的代码先抓住他们。
该代码可以用于完整的.Net Framework,但IsHandleCreated
不存在于精简版框架下。
问题:我该用什么来代替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是否为false,但试图对父级调用仍然失败? – ctacke
它发生得太快。当我的调试器得到它时,它不存在。我得到的实际错误信息是'Invoke或BeginInvoke无法在控件上调用,直到窗口句柄被创建。' – jp2code