C# C/S 弹出子窗体时父窗体不能操作

显示第一个窗体ThreadPool.QueueUserWorkItem(newWaitCallback(showAppScanfDialog),frm);privatev... 显示第一个窗体
ThreadPool.QueueUserWorkItem(new WaitCallback(showAppScanfDialog), frm);
private void showAppScanfDialog(object form)
{
frm = (申请及扫描)form;
frm.ShowDialog();
}
显示第二个窗体

ThreadPool.QueueUserWorkItem(new WaitCallback(showScanfAppDialog), ScanfAppFrm);

private void showScanfAppDialog(object form)
{
ScanfAppFrm = (扫描申请)form;
ScanfAppFrm.ShowDialog();
}
这里的第二个窗体是在点击第一个窗体上的按钮后显示的,现在想让第二个窗体显示之后第一个窗体就不能操作了,我把第一个窗体的IsMdiContainer属性设置为了TRUE,在显示第二个窗体的代码中添加ScanfAppFrm.MdiParent = frm;这句代码,运行中这句代码就会提示:线程间操作无效,
从不是创建控件“申请及扫描”的线程访问它。我知道这需要用到代理,可是不知道代码应该怎样写。
还有就是不是说ShowDialog()显示出来的是非模式的窗体么,子窗体显示出来后父窗体本来就不应该能被操作的,可是我的父窗体却依然能操作,这是为什么呢?大神们指导下,谢谢
展开
 我来答
hawkeyes0
2013-09-27 · TA获得超过600个赞
知道小有建树答主
回答量:484
采纳率:0%
帮助的人:141万
展开全部
因为你是在线程池调用的ShowDialog,导致调用变成异步,所以与主窗口的主线程无关,因此主窗口不会被挂起。
如果你直接在主窗口中调用ShowDialog才会正确将主窗口挂起。
追问
可是要是在主线程中执行ShowDialog的话,主线程不就阻塞了吗?难道要再创建一个线程?
追答
谁调用谁就是主窗口,跟是不是MDI没关系
t2995729
2013-09-27 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:233
采纳率:100%
帮助的人:26.7万
展开全部
这个应该用到了多线程 你只用了一个线程 怎么可能好用能 创建二个线程就行了
追问
我写的是多窗体的,难道要每出现一个窗体都要创建一个线程吗?
追答
这个只能  这样  点击一个窗口等于占用只一个线程  别得就不能用 了   也许其他高人  能给你更好的答案  我只知道这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式