在异步任务期间关闭表单时转换方法中的异常

时间:2018-05-26 11:09:00

标签: c# winforms

我正在尝试通过以下方式可视化冒泡排序:我有一个textBoxes head->next数组,并在每次迭代时我突出显示(通过将背景颜色更改为黄色)此数组的两个元素(以显示我现在正在使用的元素),等待1.5秒,更改位置(如果需要),再次等待,然后再次返回白色。为了等待1.5秒,我使用arr[]。一切正常,除非我不想等到排序结束。当我在排序过程中单击关闭按钮时,程序会抛出异常:

  

抛出异常:mscorlib.dll中的“System.FormatException”   附加信息:输入字符串格式不正确。 **,显示在await Task.Delay(1500);

但如果我等待程序完成一切正常。

这是我的代码:

if (Convert.ToInt32(arr[j].Text) > Convert.ToInt32(arr[j+1].Text))

提前致谢

2 个答案:

答案 0 :(得分:0)

这可能听起来很愚蠢:

表单的CancelButton属性是否已分配给您已挂钩此事件的按钮?

这是通过按ESC键关闭表单时调用此方法的唯一方法。

否则

当表单关闭时,文本框会逐渐设置为textBox.Text ="";

现在,如果你这样做

var value = Convert.ToInt32("");

然后您将收到System.FormatException:'输入字符串的格式不正确。'异常。

如Aman评论中所说,处理这种情况的最佳方法是在关闭事件中设置取消令牌并相应地打破你的循环

答案 1 :(得分:0)

此方案最简单的解决方法是在await之后检查表单是否仍然可用。即:

await Task.Delay(1500); if(this.IsDisposed) return;

但是,使用BackgroundWorker并通过ProgressChanged回调更新UI将是向更好方法的迭代。