catch模块中不能使用MessageBox

stromlin 2016-10-09 03:50:03
问题如题,catch模块中找不到MessageBox。
开发环境是vs2015,.net 4.5.1。

我在try中设置了一个cmd的超时限制。当数据库连接超时的时候,就在catch中弹出MessageBox,给用户提示信息。
全局异常提示对于这种小项目略显浪费,不过也不失为一种好方法。但我就是想在这里弹出一个MessageBox。

代码如下所示:
public DataTable Query(SqlConnection conn, string cmdText)
{

DataTable dt = new DataTable();
try
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdText;
cmd.CommandTimeout = 3;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
cmd.Dispose();
}
catch (Exception e)
{

}

return dt;
}

还请论坛上的各位先生帮我分析一下原因。
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmcooler 2016-10-09
  • 打赏
  • 举报
回复
你这个函数,如果是在一个子线程中调用,那是没法显示消息框的。 那个线程中,没有消息循环,无法显示任何窗口。它只能做后台耗时的任务。 如果要显示消息框,你可以将要显示的文本,发送到主线程来显示: mainForm.BeginInvoke( 消息文本 ) 异步发送到主窗口,此函数会立即返回。 mainForm.Invoke( 消息文本 ) 同步调用到主窗口,此函数将阻塞,直到用户点按了消息框 mainForm.Invoke() 的同步调用,要注意,其前后不要处于任何锁中。否则将可能导致死锁: 刚巧,一定是刚巧,就在你的线程,进入 Query() 的时候,主线程调用了另外一个函数,该函数用到和 Query() 相同的一把锁。 然而,你的 Query() 锁住了对 mainForm.Invoke() 的调用,而 mainForm.Invoke() 正在等主线程返回。 主线程调用的那个函数,正在等你释放锁。 这下,就死锁了
stromlin 2016-10-09
  • 打赏
  • 举报
回复
谢谢,我已经知道我的程序问题在哪里了。
闭包客 2016-10-09
  • 打赏
  • 举报
回复
呃…… 需要引入对应的命名空间。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧