我正在开发一个基本的 Windows 窗体应用程序,该应用程序具有一些执行“繁重”工作的功能。因此,我在后台工作人员的帮助下使用 ThreadAbortExceptions - 如下所示:
public class AbortableBackgroundWorker : BackgroundWorker
-取消正在执行的功能。我们称这些函数为“HeavyFunction()”
但是,既然 ThreadAbortException 已在 HeavyFunction() 中捕获,我不知何故需要回到调用 HeavyFunction() 的“MainForm.cs”类。这是为了确保我正确关闭其他打开的连接(例如 Writer)并向用户显示消息。所以,我只是从 HeavyFunction() 中抛出一个异常,然后在 MainForm 中捕获它,就像这样(这是在 HeavyFunction() 内部:
catch (ThreadAbortException tae)
{
//Deligate abortion upwards.
SomeWriter.DeleteAndClose();
throw new ArgumentException("relevant message or identifier for later use here");
//close and delete
}
然后在 MainForm 内的“DoWork”函数中捕获抛出的异常,并进行相应的处理。
我的问题- 这是一种不好的做法吗?
我对 Threads 和 Thread.Abort 不太满意(因此首先是后台工作人员)
子问题- 有哪些简单优雅的解决方案可以将响应从被调用的类中冒泡回表单?