В чем суть: необходимо было сделать выпадающий список из пользователей (combobox). После того как из списка выбирается какой-то пользователь, он добавляется в определенный файл, далее поле combobox'a снова свободно для ввода.
Реализация: В поле combobox'a начинают вводить ФИО, появляется выпадающий список с пользователями, чьи ФИО совпадают с введенным. Поиск совпадений реализован через запрос к апи сервера(используется JIRA), далее полученный список обрабатывается и сохраняется в массив, затем этот список выводится в combobox.
Проблема: порой код стабильно работает, но бывает, что через каждые 4-5 запросов появляется ошибка AccessViolationException "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
Хотелось бы устранить данную проблему. Раньше ошибка появлялась чаще, я думала, что сервер блокирует частые обращения, поэтому запрос стала отправлять через каждые 4 символа. После этого проблема была забыта, пока программу не стали использовать в нормальном рабочем режиме.
public void dropDownList(ComboBox comboBox)
{
comboBox.Text = comboBox.Text;
string text = comboBox.Text;
string url = "https://serverAddress/api/2/user/picker?maxResults=7&query=" + text;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
request.CookieContainer.Add(Session.cookies);
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Stream stream = response.GetResponseStream();
JsonSerializer jsonSerializer = new JsonSerializer();
using (StreamReader reader = new StreamReader(stream))
{
using (JsonTextReader jsonTextReader = new JsonTextReader(reader))
{
var obj = jsonSerializer.Deserialize(jsonTextReader);
string jsonString = @JsonConvert.SerializeObject(obj);
JObject jObject = JObject.Parse(jsonString);
JArray array = (JArray)jObject["users"];
comboBox.Items.Clear();
comboBox.SelectionStart = text.Length;
int count = array.Count;
userArray = new string[count];
string temp = "";
for (int i = 0; i < count; i++)
{
temp = string.Format("{0}", array[i]["html"]);
temp = temp.Replace("strong>", "").Replace("<", "").Replace("/", "");
userArray[i] = temp;
temp = "";
}
comboBox.Items.AddRange(userArray);
Array.Clear(userArray, 0, count);
}
}
}
}
catch
{
MessageBox.Show("Что-то пошло не так");
}
}