C#:RunWorkerAsync()不会触发DoWork()

我正在编写一个基于小型表单的应用程序来连接到LDAP服务器,我希望“连接”按钮在后台工作。 所以我在这里关注这些信息和讨论

但无论出于何种原因,我的代码似乎没有正常工作:我在’worker.RunWorkerAsync();’设置断点 它只是直接通过它。

我究竟做错了什么? 我在Visual Studio 2010中工作,以防万一。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.DirectoryServices; using System.Threading; namespace ldapconnect { public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { } public Form1() { InitializeComponent(); } //server public string lds; //naming context public string root; public string username; public string password; BackgroundWorker worker = new BackgroundWorker(); private void worker_DoWork(object sender, DoWorkEventArgs e) { worker = sender as BackgroundWorker; foreach (string s in connect(worker, e, lds + "/" + root, txt_user.Text.ToString(), txt_pass.Text.ToString())) { rtb_results.Text += s + "\r\n"; } } private List connect(BackgroundWorker worker, DoWorkEventArgs e, String serv, string usr, string pass) { //Directory search code taking server path and creds passed in from form DirectoryEntry conn = new DirectoryEntry(serv, usr, pass); DirectorySearcher ds = new DirectorySearcher(conn); //I only want users ds.Filter = "objectClass=user"; List sendBack = new List(); try { SearchResultCollection results = ds.FindAll(); foreach (SearchResult result in results) { sendBack.Add(result.ToString()); } } catch (Exception ex) { sendBack.Clear(); sendBack.Add(ex.ToString()); } return sendBack; } //connect button start background worker private void btn_connect_Click(object sender, EventArgs e) { worker.RunWorkerAsync(); } //Exit Button private void btn_close_Click(object sender, EventArgs e) { this.Close(); } //set server path private void btn_server_Click(object sender, EventArgs e) { string serv = inputBox("ldap://", "IP or DNS Name of LDS Server", ""); lds = serv; lbl_server.Text = lds; } //set default context private void btn_context_Click(object sender, EventArgs e) { string cntx = inputBox("In CN=,DC=,DC= Form:", "Default Naming Context", ""); root = cntx; lbl_cntx.Text = root; } //VB interaction box private string inputBox(string a,string b,string c) { return Microsoft.VisualBasic.Interaction.InputBox(a, b, c); } private void btn_Defaults_Click(object sender, EventArgs e) { lds = "LDAP://127.0.0.1"; root = "DC=USERS,DC=TEST,DC=LOCAL"; txt_user.Text = "reader"; txt_pass.Text = "password"; lbl_server.Text = lds; lbl_cntx.Text = root; } } } 

你永远不会把事件联系起来。

  public Form1() { InitializeComponent(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); } 

你没有设定

worker.DoWork += new DoWorkEventHandler(worker_DoWork);

在调用worker.RunAsync()之前

如果您仍有活动且无法正常工作,请尝试以下操作

打电话吧

System.Windows.Forms.Application.DoEvents();

在调用RunWorkerAsync()之前

RunWorkerAsync()启动工作线程并立即返回,因此调试器似乎“单步执行”。 在worker_DoWork()方法中设置断点。