Я пытаюсь заполнить текстовое поле некоторыми данными, а именно именами нескольких инструментов построчно.
У меня есть класс, который будет генерировать и возвращать список инструментов, затем я перебираю список и добавляю новую строку в текстовое поле после каждой итерации.
Начало темы:
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() возвращает список типа инструмент.
Я внедряю therads, чтобы попытаться сохранить работоспособность графического интерфейса, пока обновляется текстовое поле. По какой-то причине другие элементы управления пользовательского интерфейса в WinForm, такие как отдельное поле со списком, остаются неактивными при нажатии до тех пор, пока текстовое поле не завершит обновление.
Правильно ли я использую потоки?
Спасибо.