【发布时间】:2016-01-12 18:31:21
【问题描述】:
所以我有一个包含这个的静态类:
public static void ShowErrorReport(Exception e, SqlCommand sqlc = null)
{
try
{
frmErrorReport frmER = new frmErrorReport(e, SqlCommand_: sqlc);
frmER.ShowDialog();
frmER.Dispose();
}
catch (Exception f)
{
Debug.Print(f.ToString());
}
}
我希望能够从在排队后台工作程序中运行的一些与数据库相关的方法中使用它。问题是这些方法有时不知道任何 winforms 对象,因此无法使用Invoke()(据我所知)。
是否有任何其他方法可以从后台工作线程调用此过程并确保在 UI 线程上创建表单?
或者我是否会通过传递一个 winforms 对象在这些数据库方法中弄得一团糟(不期待这种可能性!)?
我对多线程还很陌生...
谢谢
【问题讨论】:
-
这是糟糕的设计。更好地使用事件或异常。这也与多头无关。
-
如果没有用户可以点击您的对话框,您将如何在服务中使用确切的代码?记住这一点,即使你不需要它。它仍然有助于避免此类问题。
-
@CSharpie 我没有看到 OP 说这是来自服务的地方。
标签: c# multithreading winforms backgroundworker