Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8487749
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 10, 20262026-06-10T21:20:21+00:00 2026-06-10T21:20:21+00:00

I’m using BackgroundWorker for threading in my wpf application. But it makes the UI

  • 0

I’m using BackgroundWorker for threading in my wpf application. But it makes the UI hung as I can’t click anywhere of the UI. Here is my code snippet :

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += delegate(object s, DoWorkEventArgs args)
        {
            Dispatcher.Invoke(new Action(() => ConnectFtp()));
        };
        worker.RunWorkerAsync();
    }

private void ConnectFtp()
{
     try
        {
            int port = string.IsNullOrEmpty(txtport.Text) ? 21 : Convert.ToInt32(txtport.Text);
            if (ftpserver1 == null)
            {
                ftpserver1 = new FtpClient(txtftpserver.Text, port);
                ftpserver1.ServerResponse += new EventHandler<FtpResponseEventArgs>(ftpserver2_ServerResponse);
                ftpserver1.ClientRequest += new EventHandler<FtpRequestEventArgs>(ftpserver2_ClientRequest);
                ftpserver1.TransferProgress += new EventHandler<TransferProgressEventArgs>(ftpserver2_TransferProgress);
                ftpserver1.TransferComplete += new EventHandler<TransferCompleteEventArgs>(ftpserver2_TransferComplete);
            }
            if (!ftpserver1.IsConnected)
            {
                Run r = new Run("Server1 Status:    Resolving address of " + txtftpserver.Text + "\n" + "Server1 Status:    Connection established, waiting for welcome message... \n");
                r.Foreground = System.Windows.Media.Brushes.Black;
                msg.Inlines.Add(r);
                msgscroll.ScrollToBottom();                   
                ftpserver2_OpenAsyncCompleted(ftpserver1, txtusername.Text, txtpassword.Password);
            }
        }
        catch { }
}

In the ConnectFtp() method i’m connecting to a ftp server. The UI doesn’t work when the connection state of ftp server is ‘connecting’. but after completing the connection everything is okay!
Please help me out !
thanks in advance!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-10T21:20:23+00:00Added an answer on June 10, 2026 at 9:20 pm

    You are dumping the complete method over to UI thread Dispatcher from the background worker.
    Here

    Dispatcher.Invoke(new Action(() => ConnectFtp()));
    
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += delegate(object s, DoWorkEventArgs args)
            {
                ConnectFtp();
            };
            worker.RunWorkerAsync();
    }
    
    private void ConnectFtp()
    {
         // Here i'm connecting to a ftp server. 
         // Do some I/O operation
         // Now time to update UI controls so we invoke on Dispatcher UI thread
         Dispatcher.Invoke(new Action(() =>
         {
             lblMessage.Text = "Process finished";
             // Some other UI updates..
         }));
    }
    

    I suppose it would be better to take advantage of Task Parallel Api available in .NET 4.0 that works good on multi-core system i.e really parallel threading. Advantage of using TPL is that it uses closures on variables and UI elements so you can access the values on different thread and if it not work sometimes then create local variables before the Task starts and use it in Action method body and update UI controls using Dispatcher Invokes..

    For example:

    using System.Threading;
    using System.Threading.Tasks;
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
            Task TWorkOnFTP = new TaskFactory().StartNew(ConnectFtp);
    }
    
    private void ConnectFtp()
    {
         // Here i'm connecting to a ftp server. 
         // Do some I/O operation
         // Now time to update UI controls so we invoke on Dispatcher UI thread
         Dispatcher.Invoke(new Action(() =>
         {
             lblMessage.Text = "Process finished";
             // Some other UI updates..
         }));
    }
    

    Other related references:

    • Code project article of Task Parallel Library:
    • Task parallel library replacement for BackgroundWorker
    • Reporting Progress from Tasks

    Update

    As per updated question the TPL can be used as follows:

        //Closures
        var strPort = txtport.Text;
        var strFTPServer = txtftpserver.Text;
        var strUserName = txtusername.Text;
        var strPassword = txtpassword.Password;
    
        //Start Task thread
        Task TProcessFTP = new TaskFactory().StartNew(new Action(() =>
        {
            try
            {
                int port = string.IsNullOrEmpty(strPort) ? 21 : Convert.ToInt32(strPort);
                if (ftpserver1 == null)
                {
                    ftpserver1 = new FtpClient(strFTPServer, port);
                    ftpserver1.ServerResponse += new EventHandler<FtpResponseEventArgs>(ftpserver2_ServerResponse);
                    ftpserver1.ClientRequest += new EventHandler<FtpRequestEventArgs>(ftpserver2_ClientRequest);
                    ftpserver1.TransferProgress += new EventHandler<TransferProgressEventArgs>(ftpserver2_TransferProgress);
                    ftpserver1.TransferComplete += new EventHandler<TransferCompleteEventArgs>(ftpserver2_TransferComplete);
                }
                if (!ftpserver1.IsConnected)
                {
                    //Update UI Controls
                    Dispatcher.Invoke(new Action(() =>
                    {
                        Run r = new Run("Server1 Status:    Resolving address of " + txtftpserver.Text + "\n" + "Server1 Status:    Connection established, waiting for welcome message... \n");
                        r.Foreground = System.Windows.Media.Brushes.Black;
                        msg.Inlines.Add(r);
                        msgscroll.ScrollToBottom();
                        ftpserver2_OpenAsyncCompleted(ftpserver1, strUserName, strPassword);
                    }));
                }
            }
            catch { }
        }));
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm new to using the Perl treebuilder module for HTML parsing and can't figure
I ran into a problem. Wrote the following code snippet: teksti = teksti.Trim() teksti
That's pretty much it. I'm using Nokogiri to scrape a web page what has
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I want to count how many characters a certain string has in PHP, but
I have a jquery bug and I've been looking for hours now, I can't
I am reading a book about Javascript and jQuery and using one of the
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I'm using v2.0 of ClassTextile.php, with the following call: $testimonial_text = $textile->TextileRestricted($_POST['testimonial']); ... and
I have this code to decode numeric html entities to the UTF8 equivalent character.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.