2

我收到一条InvalidOperationExceptionwith 消息Cross-thread operation not valid..

_waitForm是在主窗体的构造函数中创建的。屏幕截图中的方法是从另一个线程调用的。我虽然这是BeginInvoke解决问题的方法。我知道我正在从另一个线程而不是创建的线程访问表单。关于如何解决这个问题的任何想法?

在此处输入图像描述

这是堆栈跟踪:

   at System.Windows.Forms.Control.get_Handle()
   at System.Windows.Forms.Control.get_ContainsFocus()
   at System.Windows.Forms.Control.SelectNextIfFocused()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.Hide()
   at YYYYYY.Boundary.ZzzzzForm.<HideWaitForm>b__c() in R:\Projects\XXXX\trunk\src\YYYYYY\Boundary\ZzzzzForm.cs:line 514
   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()

抱歉截图,我想展示整个图片

4

2 回答 2

3

您是否尝试过_waitForm通过以下方式进行操作:

_waitForm.Invoke(new MethodInvoker(_waitForm.Hide));

或者,如果上述方法不起作用:

_waitForm.Invoke(new MethodInvoker(() => 
{
    _waitForm.Reset();
    _waitForm.Hide();
}));
于 2012-12-17T17:21:46.167 回答
0

我已经找到了。当然是我的错!

该方法的反面是显示_waitForm. 我错误地_waitForm.Show()从另一个而不是 UI 线程调用而没有调用。奇怪的是,这能够成功并导致此异常(具有错误消息)。

于 2012-12-18T08:00:38.163 回答