gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:13:12 26 4
gpt4 key购买 nike

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

但无论出于何种原因,我的代码似乎都无法正常工作:我在“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<string> 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<string> sendBack = new List<string>();

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);
}

关于C#:RunWorkerAsync() 不会触发 DoWork(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14734517/

26 4 0
文章推荐: c# - .NET 中 PadLeft() 和 PadRight() 的 R 等价物是什么?
文章推荐: c# - 需要 RegEx 从字符串中删除所有字母
文章推荐: c# - Asp.Net 获取屏幕宽度
文章推荐: C# 如何将带有 IList 的对象转换为 IList