[ Marko Medojević @ 31.07.2008. 20:02 ] @
Ovo je kod niti
Code:

Thread.BeginCriticalRegion();
                Console.WriteLine("Pocetak!");
                Console.ReadLine();
                Console.WriteLine("Zavrsetak regiona!");
                Thread.EndCriticalRegion();
                Console.WriteLine("Kraj!!"); // ne bi trebalo da se vidi zbog Abort()


U glavnoj metodi sam kreirao i pokrenuo thread

Code:

// kreiramo thread
            ThreadStart ts = new ThreadStart(zaNit);
            Thread tr = new Thread(ts);

            // startujemo
            tr.Start();

            // gasimo i ovde cemo uhvatiti exception
            tr.Abort();


Problem je u tome što ne izvršava liniju Console.WriteLine("Zavrsetak regiona!");, a ona je u okviru kritičnog regiona, već samo ispiše početak i izbaci readline.
[ mmix @ 03.08.2008. 20:53 ] @
Mislim da si pogresno protumacio sta je critical region. To nije parce koda koje se ne moze prekinuti, to je samo deo koda koji ima poseban "tretman" ukoliko exception "iscuri" iz njega. Ako se to desi host koji je podigao .net kod biva obavesten o tome i moze da preduzme odgovarajucu akciju; trenutno tu funkcionalnost koristi samo SQL 2005 kao host korisnickog koda da zastiti lockove na SQL objekte (da ne bi tvoj kod ubio sam SQL 2005 ubacujuci ga u deadlock), za klasicne desktop i asp.net aplikacije nema efekta.
Dakle critical region ne sprecava Abort da ubije thread, a posto tvoj kod ne radi unutar SQL2005 ubijanje thread-a unutar critical region-a nije proizvelo nikakve negativne posledice. Ako hoces da se osiguras da thread zavrsi neku akciju pre nego se zavrsi, nemoj koristiti Abort() da ga gasis, upotrebi neku inter-thread signalizaciju da obavestis thread da se sam ugasi kad zavrsi task koji je zapoceo.
[ Marko Medojević @ 05.08.2008. 21:25 ] @
Hvala!
[ toxi_programer @ 06.08.2008. 22:44 ] @
Ja se izvinjavam za ovaj offtopic, ali moram da pitam.

@mmix, jel ti ovo čitaš od nekle? Zar stvarno sve ovo znaš onako "iz glave"?
[ mmix @ 06.08.2008. 23:18 ] @
Kako koji problem, nema pravila. Generalno kad resavam problem oslanjam se na sledecu listu po prioritetu:
licno znanje
tehnicka dokumentacija (uglavnom msdn library)
licni kontakti preko MSN-a
blogova ako bas ne resim na prva tri
[ES]/MSDN forumi, mada mi iskreno [ES] nije pomagao, a MSDN forum je bio parcijalno uspesan.

Ovaj problem podpada pod prvu kategoriju jer sam svojevremeno pokusao da uradim isto sto i mare GUI je lansirao thread koji je ciklicno obavljao pozadinske multistep transakcije i nije smeo da bude prekinut usred iste; posto resenje nije upalilo MSDN je otkrio zasto, pa se to "zalepilo" u mozak kao i resenje bazirano na thread signalizaciji. Sad da si me pitao kako napraviti host koji dize CLR i biva obavesten o prekidu u critical regionu, to ne bih znao da ti kazem iz glave i morao bih da krenem redom listom .