NeoLogy 74 Report post Posted May 26, 2011 Salam... Nak tanya sket psal VB.Net..masih beginner.. Camni..aku nak buat satu function yang enumerates file dalam folder termasuk yang dalam subfolder... code tu jadi dengan jayanya..tapi masalah yang aku hadapi di sini ialah..time code execution..maknenya time dia enumerates files tu..sume button or GUI aku stuck..xbleh nak click or buat apa2..even nak minimized windows..sampai la process tu tamat.. so, aku try search kat google pasal multi threading ni..mengikut yang aku paham la..kita boleh buat multi task serentak dalam thread yang berbeza.. aku ada gune tool backgroundworker yang ada dalam VB tu..tapi still keras camtu..so..sape2 bleh tolong explain sket camne nak buat tu.. Quote Share this post Link to post Share on other sites
Stranger 0 Report post Posted May 31, 2011 [quote]code tu jadi dengan jayanya..tapi masalah yang aku hadapi di sini ialah..time code execution..maknenya time dia enumerates files tu..sume button or GUI aku stuck..xbleh nak click or buat apa2..even nak minimized windows..sampai la process tu tamat..[/quote] Sebabnya Windows Message Pump dah di block dengan code. So pending messages seperti WM_PAINT dan lain-lain tak dapat nak diproses sampai code tu habis. [quote]aku ada gune tool backgroundworker yang ada dalam VB tu..tapi still keras camtu..so..sape2 bleh tolong explain sket camne nak buat tu..[/quote] Dalam .NET setahu aku ade 3 cara utk multi-threading: 1) System.Threading.Thread [code] private void Button1_Click(object sender, EventArgs e) { System.Threading.Thread t = new System.Threading.Thread(FileEnumerationCode); t.Start(); } private void FileEnumerationCode() { // Insert code here } [/code] 2) System.Threading.ThreadPool [code] private void Button1_Click(object sender, EventArgs e) { System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallbackWaitCallback(FileEnumerationCode)); } private void FileEnumerationCode(object ThreadContext) { // Insert code here } [/code] 3) System.ComponentModel.BackgroundWorker (Ni aku x pernah pakai) Kalau nak baca dgn lebih lanjut : [url="http://www.yoda.arachsys.com/csharp/threads/"]link[/url] Quote Share this post Link to post Share on other sites
NeoLogy 74 Report post Posted May 31, 2011 thanks..tapi masalah ni dah setel dengan penggunaan Application.DoEvents() in between loop..so, masalah hang ni dah setel..tapi multithreading ni menarik untuk di explore..cume function aku skrang ni perlukan arguments..so, apa yang ko explain di atas ni untuk function without arguments kan? Quote Share this post Link to post Share on other sites
Stranger 0 Report post Posted May 31, 2011 Yup, tapi both [url="http://msdn.microsoft.com/en-us/library/system.threading.thread.start.aspx"]System.Threading.Thread.Start()[/url] dan [url="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx"]System.Threading.QueueUserWorkItem()[/url] ade method overload, so boleh pass object. Tutorial kat sini : [url="http://www.yoda.arachsys.com/csharp/threads/parameters.shtml"]Link[/url] Quote Share this post Link to post Share on other sites
NeoLogy 74 Report post Posted May 31, 2011 thanks stranger.. Quote Share this post Link to post Share on other sites