Я пытаюсь визуализировать пузырьковую сортировку следующим образом: у меня есть массив textBoxes arr[]
, и на каждой итерации я выделяю (изменяя задний цвет на желтый) два элемента этого массива (чтобы показать элементы, которые яЯ работаю сейчас), подождите 1,5 секунды, поменяйте местами (при необходимости), снова подождите, и снова сделайте фоновый цвет белым.Чтобы подождать 1,5 секунды я использую await Task.Delay(1500);
.Все работает нормально, кроме случаев, когда я не хочу ждать, пока сортировка не закончится.Когда я нажимаю кнопку закрытия во время сортировки, программа выдает исключение:
Исключение: «System.FormatException» в mscorlib.dll Дополнительная информация: Входная строка была в неправильном формате.**, показывая в строке if (Convert.ToInt32(arr[j].Text) > Convert.ToInt32(arr[j+1].Text))
Но если я дождусь завершения программы, все будет в порядке.
Вот мой код:
async private void button1_Click(object sender, EventArgs e)
{
int num = 0;//number of comparisons
int swap = 0;//number of swaps
for (int i = 0; i < 10; i++)
{
int border = checkBox1.Checked ? (10 - 1 - i) : 9;//if checkBox1.Checked we use advanced bubble sort
for (int j = 0; j < border; j++)
{
arr[j].BackColor = arr[j + 1].BackColor = Color.Yellow;
num++;
label3.Text = num.ToString();
if (Convert.ToInt32(arr[j].Text) > Convert.ToInt32(arr[j+1].Text))
{
label1.Text = arr[j].Text + " is grater than " + arr[j + 1].Text + "\n\nNumbers must \nbe changed";
await Task.Delay(1500);
swap++;
label4.Text = swap.ToString();
string temp = arr[j].Text;
arr[j].Text = arr[j + 1].Text;
arr[j + 1].Text = temp;
}
else
{
label1.Text = arr[j].Text + " is smaller \nor equall to " + arr[j + 1].Text + "\n\nNumbers stay";
}
await Task.Delay(1500);
arr[j].BackColor = arr[j + 1].BackColor = Color.White;
if (checkBox1.Checked) arr[j + 1].BackColor = Color.Cyan;//elements that are already sorted (only in advanced bubble sort)
}
if (checkBox1.Checked) arr[0].BackColor = Color.Cyan;
label1.Text = "Array is now sorted";
}
}
Заранее спасибо