首页 新闻 赞助 找找看

C# 等待窗体弹出后不能操作

0
悬赏园豆:10 [待解决问题]

我的C#程序在读取数据时,难免有所耗时。为了告知用户程序正在运行,要等一会儿。在读取数据时,触发事件的方法里,新开一个线程(TD = new Thread(showwaitfrm);)。该线程弹出一个窗体。该窗体上提示用户程序在运行不要做其它操作。

图片1

传递给线程的方法。

图片2

等待窗体样式

等到主线程数据读取完成了。在将这个等待线程关闭。

但是在等待的过程中,我发现: 弹出的等待窗体,不能被拖动。否则,就会有如下的提示:

图片3

这是什么所导致的?这里弹出的vshost32.exe的问题我该如何追踪呢?

我的环境是win10 VS2010;.net 4.0

多谢诸位

 

cbSharp的主页 cbSharp | 初学一级 | 园豆:192
提问于:2017-02-27 13:59
< >
分享
所有回答(2)
0

这和windows的窗口程序的线程模型有关,默认的主线程是STA的,如果在线程中弹出窗口,参考

http://stackoverflow.com/questions/11995466/c-sharp-calling-form-show-from-another-thread

public static Form globalForm; void Main() { globalForm = new Form(); globalForm.Show(); globalForm.Hide(); // Spawn threads here } void ThreadProc() { myForm form = new myForm(); globalForm.Invoke((MethodInvoker)delegate() { form.Text = "my text"; form.Show(); }); }

2012 | 园豆:21228 (高人七级) | 2017-02-27 16:10

大哥,谢谢你的回答。不好意思,回复晚了。你是觉得我该用Invoke来实现窗体的showDialog方法么? 我去试试看。

支持(0) 反对(0) cbSharp | 园豆:192 (初学一级) | 2017-03-08 20:13

@cbSharp: 对,窗体显示只能在UI线程

支持(0) 反对(0) 2012 | 园豆:21228 (高人七级) | 2017-03-09 09:00
0

写个线程...

lwr | 园豆:48 (初学一级) | 2017-03-06 10:49

可是,我的这个窗体本身就是在线程里实现的啊?“TD = new Thread(showwaitfrm);”

支持(0) 反对(0) cbSharp | 园豆:192 (初学一级) | 2017-03-08 20:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册