В настоящее время я работаю над программой для реализации функции резервного копирования.Поэтому я пытаюсь выбрать имена компьютеров через Active Directory и отображать их в виде подсказки в текстовом поле.Это также работает до сих пор, но время от времени возникает проблема, что он не показывает никаких предложений, но ошибка "System.AccessViolationException".Я также не нашел решения с помощью исследований.Я могу только представить, что он пытается прочитать список автозаполнения, пока он снова заполняется.
Надеюсь, у меня есть совет!
Большое спасибо!
//Textbox Declaration
this.textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.textBox1.AutoCompleteCustomSource = backup.pc_names_return();
//Textbox changed function
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length > 4)
{
try
{
backup.get_pc_names(textBox1.Text);
}
catch
{
}
}
}
private AutoCompleteStringCollection auto_values = new AutoCompleteStringCollection();
//Autocomplete PC Names
public void get_pc_names(string input)
{
auto_values.Clear();
if (input.Length > 0)
{
DirectoryEntry de = new
DirectoryEntry(ad_connection_string);
DirectorySearcher ds = new DirectorySearcher(de);
SearchResultCollection src;
ds.Filter = "(&(objectCategory=Computer)
(objectClass=Computer)(Name=" + input + "*))";
src = ds.FindAll();
if (src.Count > 0)
{
int counter = 0;
foreach (SearchResult member in src)
{
string temp = member.GetDirectoryEntry().Name;
temp = temp.Replace("CN=", "");
auto_values.Add(temp);
counter++;
if (counter == 5)
{
break;
}
}
}
}
}
//Return autocomplete
public AutoCompleteStringCollection pc_names_return()
{
return auto_values;
}