我的C#程序在读取数据时,难免有所耗时。为了告知用户程序正在运行,要等一会儿。在读取数据时,触发事件的方法里,新开一个线程(TD = new Thread(showwaitfrm);)。该线程弹出一个窗体。该窗体上提示用户程序在运行不要做其它操作。
图片1
传递给线程的方法。
图片2
等待窗体样式
等到主线程数据读取完成了。在将这个等待线程关闭。
但是在等待的过程中,我发现: 弹出的等待窗体,不能被拖动。否则,就会有如下的提示:
图片3
这是什么所导致的?这里弹出的vshost32.exe的问题我该如何追踪呢?
我的环境是win10 VS2010;.net 4.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(); }); }
大哥,谢谢你的回答。不好意思,回复晚了。你是觉得我该用Invoke来实现窗体的showDialog方法么? 我去试试看。
@cbSharp: 对,窗体显示只能在UI线程
写个线程...
可是,我的这个窗体本身就是在线程里实现的啊?“TD = new Thread(showwaitfrm);”