【发布时间】:2009-11-02 11:57:58
【问题描述】:
我的应用程序(C#、VS2008)通过网络从数据库(SQL Server 2008 Express)加载信息。在(可能)较长的等待期间,我希望在不同的线程上出现一个“正在加载...”对话框,但前提是该操作需要超过特定的时间段(比如 500 毫秒)。
所以,到目前为止,我的加载表单在 500 毫秒后显示(如果操作持续那么长时间),而没有设置加载对话框表单的所有者(即调用 LoadingDialog.ShowDialog()),但是当我尝试调用 LoadingDialog. ShowDialog(IWin32Window owner) 将所有者设置为主窗体(通过线程的参数传入) 我得到有关跨线程访问控件的 InvalidOperationException。
我的基本问题是:我可以创建并 ShowDialog 一个将所有者参数设置为另一个线程上的表单的表单吗?我想这样做,以便加载对话框在应用程序的其余部分是模态的,即像任何其他对话框一样获得焦点并不允许在其他地方输入。
谁能给点建议?我读过很多关于没有运气的闪屏,也有关于没有运气的 Invoke 和 BeginInvoke。我有什么不同的方法可以解决这个问题吗?
如果您不明白,请随时要求澄清。
谢谢(正如他们用法语所说的那样),
雅各布。
【问题讨论】:
-
不,你不能这样做,甚至不要尝试。
-
为什么要将对话框放在不同的线程上?
标签: c# multithreading forms owner