Я пытаюсь заполнить текстовое поле некоторыми данными, а именно названиями нескольких инструментов по одной строке за раз.
У меня есть класс, который будет генерировать и возвращать список инструментов, затем я повторяючерез список и добавляйте новую строку в текстовое поле после каждой итерации.
Начало потока:
private void buttonListInstruments_Click(object sender, EventArgs e)
{
if (ins == null)
{
ins = new Thread(GetListOfInstruments);
ins.Start();
}
else if (ins != null)
{
textBoxLog.AppendText("Instruments still updating..");
}
}
Делегат для обновления текстового поля:
public delegate void UpdateLogWithInstrumentsCallback(List<Instrument> instruments);
private void UpdateInstruments(List<Instrument> instruments)
{
textBoxLog.AppendText("Listing available Instruments...\n");
foreach (var value in instruments)
{
textBoxLog.AppendText(value.ToString() + "\n");
}
textBoxLog.AppendText("End of list. \n");
ins = null;
}
Вызов элемента управления:
private void GetListOfInstruments()
{
textBoxLog.Invoke(new UpdateLogWithInstrumentsCallback(this.UpdateInstruments),
new object[] { midiInstance.GetInstruments() });
}
Примечание: GetInstruments () возвращает Список типа Инструмент.
Я реализую rads, чтобы попытаться сохранить работоспособность графического интерфейса при обновлении текстового поля.По какой-то причине другие элементы управления пользовательского интерфейса в WinForm, такие как отдельное поле со списком, остаются неактивными при нажатии до тех пор, пока текстовое поле не завершит обновление.
Правильно ли я использую потоки?
Спасибо.