如果在BackgroundWorker运行过程中关闭窗体…
在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。由于操作是异步执行的,用户可能在异步操作执行过程中关闭当前窗体,而窗体的关闭会伴随着Dispose方法的执行。如果我们注册了BackgroundWorker的RunWorkerCompleted事件,并且在该事件处理程序中需要操作这个被Disposed的窗体,就会出现一些无法预知的异常。 一、一个简单的例子我们写一个简单的例子来说明上述的场景:在一个非主窗体(主窗体的关闭会导致程序的终止)的Windows窗体中,一个BackgroundWorker被用于异步地执行一段耗时的操作。在我们的例子中,通过让线程休眠10秒来模拟这个“耗时操作”。方法backgroundWorker_RunWorkerCompleted是BackgroundWorker的RunWorkerCompleted事件处理方法,在这里我们通过MessageBox来显示当前窗体的IsDisposed属性值。注册到该BackgroundWorker的异步操作通过点击某个按钮开启。相关的代码如下所示。 1: public partial class BgwForm : Form 3: public BgwForm()
5: InitializeComponent(); 7:? 9: { 11: } 13: void btnStart_Click( 14: { 16: } 18: void backgroundWorker_RunWorkerCompleted( 19: { 21: }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用ASP.NET 2.0处理过期会话的最有效方法是什么
- ASP.net页面在import语句中获取错误,但我有参考的地方吗?
- asp.net-mvc-3 – ASP.NET MVC 3 JSONP:这适用于JsonValue
- asp.net – HTTP PUT在IIS 8.5上失败
- asp.net – 选择下拉列表项目findbytext没有区分大小写vb.n
- asp.net-mvc – System.NotSupportedException:不支持指定
- asp.net – 一个明智的PasswordStrengthRegularExpression
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automap
- asp.net-mvc-3 – 用于ASP.NET MVC的Razor View Engine的源
- asp.net-mvc-3 – 如何增加会话超时MVC 3
- asp.net-mvc – 从ASP.NET MVC中的部分视图中删除
- asp.net – 如何在mvc中使用自定义成员身份添加更
- asp.net-mvc – 如何使WebAPI操作只能从我的应用
- asp.net – app_offline.htm在生产框中抛出HTTP
- asp.net-mvc – asp.net mvc并检查用户是否已登录
- asp.net – 在MVC 3中的url中传递多个参数
- 了解asp.net中的负载平衡
- asp.net – 我的C#Web应用程序项目中缺少Identit
- asp.net-mvc-3 – 如何指定默认LayoutPage在Razo
- asp.net – 是果园还是Umbraco MVC?