首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使ChildWindow阻塞

如何使ChildWindow阻塞
EN

Stack Overflow用户
提问于 2009-08-13 17:59:23
回答 6查看 15.6K关注 0票数 14

ChildWindow是一个模式窗口,但它不会阻塞。有没有办法让它阻塞?我基本上想要一个ShowDialog()方法,它将调用ChildWindow.Show(),但直到用户关闭ChildWindow时才返回。我尝试在ChildWindow.Show()之后使用Monitor.Enter()阻塞,但是ChildWindow没有呈现,浏览器就挂起了。有谁有什么想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-08-13 19:30:51

我不相信它支持这种行为。你可以在CodePlex上使用vote for it。根据您的需要,您可以使用look at some of Tim Heuer's workarounds here或使用不同的自定义控件,如Silverlight Modal Control (on CodePlex)

票数 7
EN

Stack Overflow用户

发布于 2009-08-18 22:20:25

您无法在Silverlight中执行您正在尝试执行的操作。对UI所做的任何更改都将在UI线程上运行。如果阻塞UI线程,用户将无法与浏览器交互,因此用户无法执行任何操作来解除阻塞线程。

如果你真的想创建一个阻塞对话框窗口,唯一的方法就是使用非UI线程。例如,您可以创建一个类似以下内容的方法:

代码语言:javascript
复制
    private void ShowModalDialog()
    {
        AutoResetEvent waitHandle = new AutoResetEvent(false);
        Dispatcher.BeginInvoke(() =>
        {
            ChildWindow cw = new ChildWindow();
            cw.Content = "Modal Dialog";
            cw.Closed += (s, e) => waitHandle.Set();
            cw.Show();
        });
        waitHandle.WaitOne();
    }

此方法将显示一个对话框窗口,并且在关闭对话框窗口之前不会返回。但此方法只能从non-UI-thread.调用从UI-thread调用它将导致死锁(因为UI-thread正在等待一个只能在UI-thread上触发的事件)。

或者,您应该考虑使您的逻辑异步,而不是强制它同步。

票数 5
EN

Stack Overflow用户

发布于 2010-09-27 17:40:51

如果您想对子窗口关闭执行某些操作,请使用以下代码。在调用前隐藏不需要的控件,并在子窗口关闭时显示,简单:)

代码语言:javascript
复制
ChildWindow cw = new ChildWindow(); 
cw.Closed += new EventHandler(cw_Closed);
cw.Show();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1273614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档