Jump to content
Sign in to follow this  
NeoLogy

File Enumeration Yang Sebabkan Gui Not Responding

Recommended Posts

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..

Share this post


Link to post
Share on other sites
[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]

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...