c# - BackgroundWorker() 运行时 UI 挂起

标签 c# wpf multithreading backgroundworker

我在我的 wpf 应用程序中使用 BackgroundWorker 进行线程处理。但这会使 UI 挂起,因为我无法单击 UI 的任何位置。这是我的代码片段:

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 { }
}

在 ConnectFtp() 方法中,我正在连接到 ftp 服务器。当 ftp 服务器的连接状态为“正在连接”时,UI 不工作。但是在完成连接后一切正常! 请帮帮我! 提前致谢!

最佳答案

您正在为 ConnectFTP 方法调用回 worker 中的 UI 线程。你需要有这个...

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

private void ConnectFtp()
{
 //here i'm connecting to a ftp server. 
}

关于c# - BackgroundWorker() 运行时 UI 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293601/

相关文章:

c# - ScrollViewer 在没有固定高度的情况下不显示滚动距离

wpf - 在 WPF 中显示状态消息的最佳方式是什么?

multithreading - GPU vs CPU? GPU中用于程序计算加速的内核/线程数?

python - 在 python 中获取用于执行使用多个线程的进程的实时输出?

c# - 如何使用 bytes 中的 opencv 显示视频?

c# - 有没有办法让窗口包含窗口中的自定义应用程序?

WPF/XAML - 文本可以自动调整大小吗?

java - SwingWorker,取消按钮不起作用

c# - 获取 RadListBox 中的 Checked 复选框 (telerik)

c# - 从列表集合中删除项目不删除