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 に答える