Mus*_*fiq 1 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 { }
}
Run Code Online (Sandbox Code Playgroud)
在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.
}
Run Code Online (Sandbox Code Playgroud)