WebHU - Programozási kérdések és válaszok

Nem kezelt "System.ComponentModel.Win32Exception" AvalonDock 2.0 használatakor

AvalonDock 2.0-t használok, és amikor bármikor kinyitok egy dokkolótárolót, hibakeresési módban az alkalmazás összeomlik. (jól működik, ha hibakeresés nélkül fut). Az alábbi kivételt kapom:

"System.ComponentModel.Win32Exception" típusú kezeletlen kivétel történt a WindowsBase.dll fájlban

További információ: A művelet sikeresen befejeződött

Erre a válaszra bukkantam, amely azt javasolja, hogy törölje a jelölőnégyzeteket a Kivételek beállításainál. A vezetékes dolog az, hogy első használatkor működött. de már nem. Próbáltam más gépeken sem megy. bármilyen javaslata van ennek javítására.
Avalon kód (a kivétel az 5. sorban található)

protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
            if (msg == Win32Helper.WM_WINDOWPOSCHANGING) {
                if (_internalHost_ContentRendered) {
                    // the below line throw the exception
                    Win32Helper.SetWindowPos(_internalHwndSource.Handle, Win32Helper.HWND_TOP, 0, 0, 0, 0, Win32Helper.SetWindowPosFlags.IgnoreMove | Win32Helper.SetWindowPosFlags.IgnoreResize);
                }
            }
            return base.WndProc(hwnd, msg, wParam, lParam, ref handled);
        }

  • Ez csak csontfejű kódolás a könyvtártervező részéről. Win32Exceptiont dobnak egy hibakóddal, ami sikert jelez, valószínűleg ERROR_SUCCESS. A kivételkonstruktor a hibakódot egy üzenetté fordítja le, amely a A művelet sikeresen befejeződött – azaz nem történt hiba. Nyújtson hibajelentést a könyvtár karbantartójának. 15.06.2016
  • @CodyGray igen, ez így van, de van-e mód arra, hogy megakadályozzuk a kivétel elkapását az alkalmazás oldaláról. a kérdésemben hivatkozott válasz szerint. a megoldás először működött, de már nem. és nem tudtam rájönni, hogy miért. 15.06.2016
  • Az itt közzétett kivételüzenet nem azt jelzi, hogy ez az első esély kivétel. Az sem valószínű, hogy ez megoldaná a problémát. Ehhez az kellene, hogy valahol legyen egy catch blokk a könyvtár kódjában, amely elkapta a kivételt és kezelte azt. Nem tudom, mit kell tennie egy olyan kivétel kezeléséhez, amely sikert jelez. 15.06.2016
  • @CodyGray nem úgy tűnik, hogy sehol használnak catch blokkot, letöltöttem a forráskódot és futtattam a gépemen, ami pontosan ugyanazt a hibát adja, mint én. Frissítettem a kérdésemet, hogy megmutassam a kódot, ahol a kivétel előfordul. - nem tudom, segítene-e 15.06.2016
  • Gondolom a Windows 64 bites verzióját futtatod? Ez megmagyarázná, hogy a kivétel miért csendben lenyelődik, amikor bedobják egy ablakos eljárásba. A könyvtár tervezési döntései csak romlanak. Nem is értem, miért dobódik ez a vonal. Az egyetlen értelmes dolog az, hogy helytelenül annotálták a SetWindowPos P/Invoke aláírását, és a PreserveSig értéke false. Ami azt okozza, hogy a sikert jelző visszatérési értéket összekeverik a sikertelenséget jelző visszatérési értékkel. Mondtam már, hogy hibajelentést kell benyújtania a könyvtár karbantartójának? 15.06.2016
  • @CodyGray megemlítetted ;) köszönöm a segítségedet, köszönöm 15.06.2016
  • Nos, megnéztem a kódot, és nem úgy tűnik, hogy ezt csinálják. A SetWindowPos aláírása itt , és csak egy bool értéket ad vissza, jelezve a sikert vagy a kudarcot (ami helyes). Szóval fogalmam sincs, hogy az általad mutatott vonal mennyire kivételt jelent. Biztosan valami más is történik. 15.06.2016
  • @CodyGray Megpróbálom hibakeresni a kódot, és a metódus kivételt dob, miután 30-szor hívták. Megpróbálom felvenni velük a kapcsolatot. közben azt hiszem ezzel együtt kell élnem. amúgy köszönöm a segítséget :) 15.06.2016
  • @IBRA: Megerősítem a megfigyelésed. A kivételt minden alkalommal a 31. hívás jelenti. Páratlan. 01.08.2017

Válaszok:


1

Nyilvánvalóan problémát nyújtottak be, de a mai napig nem érkezett válasz.

Így kerülő megoldásként minden kezeletlen kivételt az Application használatával kezeltem. .DispatcherUnhandledException from App.xaml.cs.
Kérjük, tekintse meg ezt a választ további részletekért.
Kód:

protected override void OnStartup(StartupEventArgs e) {
     base.OnStartup(e);
     this.DispatcherUnhandledException += AppGlobalDispatcherUnhandledException;
}

private void AppGlobalDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) {
     e.Handled = true;
}
19.06.2016
  • Ha a VS2015-ből fut hibakeresési vagy kiadási módban Windows 10 rendszeren, az alkalmazás nem áll le a megoldás alkalmazásakor. Az alkalmazás leállításához kattintson a debug-stop gombra. Bármilyen ötletet? 26.10.2016

  • 2

    Bárki, aki ezen az oldalon landolt, a következő beállítás kikapcsolásával sikerült megszabadulnom a problémától:

    Eszközök > Beállítások > Hibakeresés > Általános > UI hibakereső eszközök engedélyezése XAML-hez

    07.10.2016

    3

    Gyors feltörésem az, hogy a hibakeresési konfiguráció során letiltottam az UpdateWindowPos()-t a LayoutAutoHideWindowControl osztályban.

        internal void Show(LayoutAnchorControl anchor)
        {
            if (_model != null)
                throw new InvalidOperationException();
    
            _anchor = anchor;
            _model = anchor.Model as LayoutAnchorable;
            _side = (anchor.Model.Parent.Parent as LayoutAnchorSide).Side;
            _manager = _model.Root.Manager;
            CreateInternalGrid();
    
            _model.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_model_PropertyChanged);
    
            Visibility = System.Windows.Visibility.Visible;
            InvalidateMeasure();
    #if !DEBUG
            UpdateWindowPos();
    #endif
            Trace.WriteLine("LayoutAutoHideWindowControl.Show()");
        }
    

    Jelenlegi tapasztalataim szerint ez csak a minimálisra csökkentett dokkolható konténerek drag&drop letiltását eredményezi.

    17.01.2017
  • vagy csak #if !DEBUG (és hagyd ki a #ELSE-t) 01.08.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..