Použití UseWaitCursor   zodpovězená otázka

VB.NET

Dobrý den, napsal jsem si prográmek na mazání souborů podle jména které zadám. Funguje to tak že si nastavím adresář od kterého se začně hledat, aplikace pak najde všechny podsložky a v posledním kroku dojde k vymazání všech souborů (ale adresářová struktura zůstane zachována). Smažou se buď všechny soubory které obsahují zadanou část názvu, nebo naopak všechny které ji nobsahují, podle toho co si uživatel nastaví.Regoval jsem tak na požadavek v práci, kdy bylo třeba promazat jeden archiv s šílenou adresářovou strukturou (cca 25 000 složek, 120 000 souborů a 15 složek do hloubky). Ještě chci doděla pár věcí aby byla aplikace více uživatelsky přívětivá a pak bych ji rád umístil na tyto stránky pokud bude o ní zájem, myslím si že se občas může hodit. Jen jsem se teď zasekl na tom, jak zobrazit přesýpaci hodiny. Načtení podsložek občas trvá docela dlouho a proto bych je chtěl zobrazit. Problém je že když použiju me.usewaitcursor=true tak se mi zobrazí až po skončení kódu. A děje se tak i pokud za tento řádek dám me.refresh nebo application.doevents(). Můžete mi prosím někdo poradit jak tam ty přesýpací hodiny nacpat?:)

Děkuji

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

Načítání/mazání složek provádějte ve vlastním vlákně odděleně od hlavního vlákna aplikace...

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

Přesně tak, nejlepší je vytvořit nové vlákno a proceduru v něm spustit. V aplikaci je pak dobré udělat nějaké modální okno s ProgressBarem, aby uživatel viděl, že se něco děje. Navíc tím efektivně zajistíte, že během operace nebude provádět nic jiného (pokud bude okno modální a ukončí se samo po skončení operace) a celá aplikace nebude zaseknutá.

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

Možnože toto by mohlo pomôcť

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Windows.Forms.Cursor.Current = Cursors.WaitCursor
        System.Threading.Thread.Sleep(2000)
        '.................
        Windows.Forms.Cursor.Current = Cursors.Default
    End Sub
End Class

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

Takto to funguje

Public Class Form1
    Dim i As Double = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Windows.Forms.Cursor.Current = Cursors.WaitCursor
        System.Threading.Thread.Sleep(200)
        Do While i < 1000000000
            i += 1
        Loop
        If i > 999999999 Then Windows.Forms.Cursor.Current = Cursors.Default : MsgBox(i) : i = 0
    End Sub
End Class

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

Podobne veci se resi jednoduchym prikazem v shelli ... treba unixovy find to umi docela jednoduse a hezky (teda az na par detailu:). A kdyz to umi unixovy find, tak to bude umet i powershell. Je vetsinou jednodussi pouzit jiz hotove nastroje, nez si psat a ladit vlastni, zvlast kdyz je to tak trivialni vec, jako mazani souboru podle danych jednoduchych kriterii.

nahlásit spamnahlásit spam 0 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