【发布时间】:2016-01-13 10:30:46
【问题描述】:
我目前正在开发一个使用来自不同部门的程序集的软件。
我从这个程序集中调用一个方法,如下所示:
using (var connection = (IConnection) Factory.GetObject(typeof (IConnection)))
以前的代码可以正常工作。但是在最后几分钟,当我尝试启动它时,我的程序似乎什么也没做。在调试时按下暂停键显示它“卡在”上面的行。
我的猜测是他们只是在做一些维护或其他事情,但这不是重点。
所以我认为如果程序没有启动,告诉用户出了什么问题会很好。像这样简单的东西
MessageBox.Show("Could not connect", "Connection Error");
然后关闭程序。我的问题是:
如何在设定的时间后终止命令的执行并跳转到其他地方?
我的猜测是将它移动到一个单独的线程,然后把调用线程休眠几秒钟,之后如果尚未完成,它将处理额外的线程。但这对我来说似乎真的很脏,必须有更好的方法。
【问题讨论】:
-
如果你的
IConnection是SqlConnection,你可以使用它提供的默认连接超时。 -
@Kilanny 尽管用法非常相似,但它不是 SqlConnection,似乎没有人会费心实现超时。
-
否则使用
Timer来检查执行,超时时应该终止作业 -
using声明是为了在中止线程后进行整理,至少在理论上... -
@slawekin
using块用于在离开块时自动处置指定对象。但这从未发生过,因为我一开始就没有得到对象。
标签: c# multithreading