• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 248
  • Last Modified:

Threading in .net

we are making an application which requires fetch from the database using a webservice. Until the fetch completes the application hangs. We incoroporated threads into the application both plain threads and background threads but none of them are able to bring the application out of the hang until the fetch completes. What could be wrong with our approach? we want a separate thread doing a fetch and doesnot effect the rest of the application!
0
sultansaadat
Asked:
sultansaadat
  • 4
  • 2
1 Solution
 
käµfm³d 👽Commented:
Could you possibly post some code dealing with where you are creating the thread and where you are making the threaded call to the webservice?
0
 
sultansaadatAuthor Commented:
here goes the code. This one has a simple call to an online database.
 ClassDAL cdl = new ClassDAL();
 DataSet ds = new DataSet();
 void testThread()
        {
            
            
             if (InvokeRequired)
            {
                   
                MethodInvoker method = new MethodInvoker(testThread);
                Invoke(method);
                return;
            }
 
           
            ClassDAL cdl = new ClassDAL();
            //DataSet ds = new DataSet();
            ds = cdl.getAllProducts();
 
        
           
        }
 
 private void button1_Click(object sender, EventArgs e)
        {
         
            this.backgroundWorker1.RunWorkerAsync();
            
            
            
        }
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
 
            testThread();
            //System.Threading.Thread.Sleep(500);
           
        }
 
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = ds.Tables[0].TableName;
        }

Open in new window

0
 
sultansaadatAuthor Commented:
our thread is not running asynchronously!
0
Restore individual SQL databases with ease

Veeam Explorer for Microsoft SQL Server delivers an easy-to-use, wizard-driven interface for restoring your databases from a backup. No expert SQL background required. Web interface provides a complete view of all available SQL databases to simplify the recovery of lost database

 
obrienslalomCommented:
Take a look at the documentation for the ISychronizeInvoke interface:
http://msdn.microsoft.com/en-us/library/system.componentmodel.isynchronizeinvoke_methods.aspx.
What happens with Invoke is that is basically just a call to BeginInvoke followed by a call to EndInvoke.  Invoke will be a synchronous call.
0
 
sultansaadatAuthor Commented:
Thanks. I will try the code now! :)
0
 
sultansaadatAuthor Commented:
basically we wont have to create other threads?
0
 
obrienslalomCommented:
I am not going to say that you don't need another thread.  That is what the BackGroundWorker will do for you.  What you are running into in your case is a bit odd actually.  A little background might be needed.

Imagine you have a single GUI thread, which creates a bunch of controls. Now you spawn off another thread to perform some work. This new thread shouldn't be able to update the controls created and owned by the GUI thread.

Invoke/BeginInvoke transfers the tasks onto the GUI threads. That is why you are seeing an unresponsive interface.  You are spawning a background worker, which just transfers the work right back to the original thread.

So, basically, you don't need to use Invoke unless you are updating the controls on the GUI.  So do as much work as you can first, then use Invoke when you have to (which will be any cross-thread updates).
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now