Dobrý den,všechny náročnější operace by jste měl spouštět ve vlastním vlákně, aby aplikace "nezamrzla". K tomu celkem dobře může posloužit komponenta background worker která má vyřešenou synchronizace a řadu dalších vymožeností. Článek o ní byl myslím na tomto webu a krásná ukázka byla i ve videoturiálech. Dokonce tam bylo vyřešeno i "stornování" procedur běžících ve vlastním vlákně. V podstatě jde o to že backgroundworker má nějakou vlastnost (tuším že to je isCanceled ale to si nejsem jistý) a při práci ve druhém vlákně ji čas od času zkontrolujete. Pokud má pořád hodnotu false je to ok a pokračujete dál, pokud má hodnotu true znamená to že chcete akci stornovat a patřičně na to zareagujete. Nastavení na true můžete provést třeba z hlavního vlákna právě kliknutím na nějaké tlačítko. Btw. doporučoval bych použití databáze pokud to je možné, protože hodně věcí je vyřešeno přímo na úrovni databáze a jsou vyřešeny mnohem lépe než jste schopen napsat vy, nebo kdokoli z nás na tomto foru. Pak se může klidně stát, že procedura nepoběží 2 minuty ale 3 sekundy.
|