System.ArgumentException esineb WindowsFormsHost WPF-i rakendus

Ei tea, kas see on õige lahendus? Lisasime probleemi meie mis saab kinnitada.

Sümptomid

Olete loonud Microsoft .NET 4.0 rakendus, mis kasutab WPF-i ja WindowsFormsHost element majutavad Windows vormi juhtelemente. Kui kasutate rakendust, kuvatakse järgmine erand.

System.ArgumentException: Nähtamatu või keelatud juhtelement ei saa aktiveerida
at System.Windows.Forms.ContainerControl.SetActiveControlInternal (kontrolli väärtus)
at System.Windows.Forms.ContainerControl.SetActiveControl (kontrolli serdiusaldusloendi)
at System.Windows.Forms.ContainerControl.set_ActiveControl (kontrolli väärtus)
at System.Windows.Forms.Integration.WindowsFormsHost.RestoreFocusedChild()
at System.Windows.Forms.Control.InvokeMarshaledCallbackDo (ThreadMethodEntry Monitor Alpine tme)
kell System.Windows.Forms.Control.InvokeMarshaledCallbackHelper (objekti obj)
kell System.Threading.ExecutionContext.runTryCode (objekti userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (TryCode kood, CleanupCode backoutCode, objekti userData)
kell System.Threading.ExecutionContext.RunInternal (ExecutionContextis ExecutionContextis, ContextCallback tagasihelistamise, objekti riik)
kell System.Threading.ExecutionContext.Run (ExecutionContextis ExecutionContextis, ContextCallback tagasihelistamise, objekti olek, Boolean ignoreSyncCtx)
kell System.Threading.ExecutionContext.Run (ExecutionContextis ExecutionContextis, ContextCallback tagasihelistamise, objekti riik)
at System.Windows.Forms.Control.InvokeMarshaledCallback (ThreadMethodEntry Monitor Alpine tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()


Põhjus

See on .NET Framework 4,0 WPF-i kinnitatud vea tõttu.

Lahendus

Te saate probleemi lahendamiseks mitmel viisil.

1. ei programmiliselt juhtelementide eemaldamine WindowsFormsHost element. Selle asemel peita saavad nähtavaks atribuudi.

2. juhtmed on sündmuseohjuri System.Windows.Forms.Application.ThreadException sündmus. See võimaldab teil maha suruda dialoogiboksi Windowsi vormide erand. Koodi saate kontrollida selleks, et näha, kui erand System.ArgumentException: System.Windows.Forms, mis sisaldab selle kutsepinu "System.Windows.Forms.Integration.WindowsFormsHost.RestoreFocusedChild". Vastasel juhul kuvavad standardse Windowsi vormide erand dialoogiboksi.


avalik MainWindow()
        {
System.Windows.Forms.Application.ThreadException += uue System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        }

Void Application_ThreadException (objekt saatja, System.Threading.ThreadExceptionEventArgs e)
        {
IF (!) FailureFromFocusedChild(e.Exception))
            {
System.Windows.Forms.Application.ThreadExceptionDialog dialoog;
dialoog = uus System.Windows.Forms.Application.ThreadExceptionDialog(e.Exception);
dialoog. ShowDialog();
            }

Privaatne bool FailureFromFocusedChild (Exception e)
        {
bool tulemus = false;
string stackTrace = e.StackTrace;
           
tulemus = (e on System.ArgumentException) & & (e.Source == "System.Windows.Forms")
                    && (stackTrace.IndexOf("System.Windows.Forms.Integration.WindowsFormsHost.RestoreFocusedChild")>=0);


Tagastab tulemuse;
        }

Lisateabe saamiseks

WindowsFormsHost kasutab kaalu akna protseduuri WM_ACTIVATEAPP akna sõnumite jälgimiseks, et teha kindlaks, kui vastuvõttev rakendus on aktiveeritakse või desaktiveeritakse praegu.

Kui vastuvõttev rakendus lülitatakse seejärel WindowsFormsHost kontrollib kas sisendi fookus akna alamakna WindowsFormsHost elemendi. Kui see on WindowsFormsHost salvestab selle juhtelemendi sisemine välja viide. Seda välja kasutatakse WindowsFormsHost seada aktiivne juhtelement rakendus on aktiveeritud hiljem uuesti.

Juhul, kui vastuvõttev rakendus käivitub, siis WindowsFormsHost kontrollib kui see sisemine väli on tühi. Kui see on tühi, käivitatakse see asünkroonselt System.Windows.Forms.Integration.WindowsFormsHost.RestoreFocusedChild meetodit. See meetod loob Control.ActiveControl varem vahemällu salvestatud sisemine väli.

Probleem ilmneb siis, kui juhtelement, mis oli vahemällu on eemaldatud WindowsFormsHost elementi pärast rakenduse oli välja lülitatud. Näiteks, see võib juhtuda, kui rakendus kasutab WPF's Application.Deactivated sündmus, et eemaldada WindowsFormsHost element juhtelemendid.

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×