Nedokončená procedura při FormClosing   otázka

VB.NET, WinForms

Nazdar chlapi,

nerozumím jedné věci, mám program ve kterém při ukončení chci, aby uložil data, takže mám událost:

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
                databaziulozit()
    End Sub

a proceduru ve které ukládám data do souboru

Private Sub databaziulozit()
        Dim soubor As New IO.StreamWriter(IO.Path.Combine("ProgData", nastroje), False, System.Text.Encoding.UTF8)
        For p As Byte = 0 To pocetNastroju
            Dim sb As New System.Text.StringBuilder()
            sb.Append(DataNastroju(p).cislo)
            sb.Append(";")
            sb.Append(DataNastroju(p).pozice)
            sb.Append(";")
            sb.Append(DataNastroju(p).typ)
            sb.Append(";")
            sb.Append(DataNastroju(p).prumer)
            sb.Append(";")
            sb.Append(DataNastroju(p).pocetzubu)
            sb.Append(";")
            sb.Append(DataNastroju(p).radiusuhel)
            sb.Append(";")
            sb.Append(DataNastroju(p).korekce)
            sb.Append(";")
            sb.Append(DataNastroju(p).otacky1)
            sb.Append(";")
            sb.Append(DataNastroju(p).posuv1)
            sb.Append(";")
            sb.Append(DataNastroju(p).popis)
            soubor.WriteLine(sb.ToString())
        Next
        soubor.Close()
    End Sub

Problém je v tom, když změním proměnnou pocetnastroju na 256, tak se mi většinou databáze uloží jen po nástroj 140, ani nedopíše řádek.

Jednou mě to skončilo asi na 250.

Jako kdyby událost nečekala na dokončení procedury a program skončil dřív.

Poraďte prosím.(zatím si vystačím se 100)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1) Do proměnné Byte nelze uložit číslo 256.

2) Neobtěžujete se zachytit a ošetřit potenciální vyjímky, takže to prostě vyletí z nedokončené metody a program skončí.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za rychlou reakci.

add1) Ano vím, že je to byte, špatně jsem se vyjádřil měl jsem na mysli počet 256 včetně 0, ale samozřejmě zadávám číslo 255.

add 2) Máte pravdu, vytvořil jsem program (mimochodem je to generátor programů pro nc stroje) a zachytávání vyjímek je v současné době taková slabší stránka, resp jsem to moc neřešil a špatně zadaná data řeším podmínkami.

Přiznám se, že ani nevím co bych tu za vyjímku odchytával a jak to napsat.

Rozhodně se podívám na tuto problematiku.

Pokud byste mi kdokoli dal nějaký nástřel budu vděčný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud nevíte jakou konkrétní vyjímku zachytávat a jak na ní reagovat, zachytávejte obecnou Exception a ideálně zapisujte do protokolu včetně StackTrace. To je nejlepší způsob hledání chyb.

Try
  'Kód, ve kterém může dojít k chybě.
Catch ex As IOException
  'Chyba v přístupu k zařízení.
Catch ex2 As Exception
  'Jakákoliv jiná chyba, zapsat do výchozího protokolu chyb.
  My.Log.WriteException(ex)
End Try

Nejdřív zachytávat konkrétní vyjímky, které je možné ošetřit, potom obecné vyjímky, které lze později analyzovat z protokolu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A hlavně se hodí říct, že logování je dobré dělat globálně na úrovni application events.

Dávat tohle do každé metody není ideální. Samozřejmě ale IOExceptions se zachytávají tam, kde vznikají, tomu se člověk už nevyhne.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Na globální úrovni zaznamenávat všechno, co se nepodařilo vyřešit lokálně. Lokálně to dávat samozřejmě jenom do metod, kde to bude možné nějak řešit.

Výchozí zapisovač diagnostických informací (My.Log) je naprosto nepoužitelný odpad, uvádím tedy svoje elegantní řešení:

http://www.vbnet.cz/snippet--89-pouzitel...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback