2

我对 WPF - C# 5.0、.NET4.5 中的 Window.IsEnabled 属性有疑问。

我有以下场景(简化):

1) 带按钮的表单

2)用户触发长时间计算操作(从数据库中获取一些数据)

3) 用户能够与新数据交互

我已经实现了以下方式:

1)点击处理程序禁用窗口(用于用户交互)并异步触发操作(这可以同步进行,没关系)

2)当异步操作完成时,窗口被启用(通过myWindowInstance.IsEnabled = true

我的问题是:

myWindowInstance.IsEnabled = true 大约需要 20 秒。我必须注意窗口中有一个 dataGridView 用于获取数据。但是,如果不禁用和重新启用胜利,这一切都需要大约 1 秒。另一个有趣的点是,当我连接到小型本地数据库时,win.IsEnabled 设置器很快就完成了。与此相反,如果我使用远程大型数据库,如前所述,此操作需要 20 秒。在这两种情况下,我只获取 100 行。

有谁知道为什么简单的 setter 需要这么多时间?

非常感谢您的任何想法!

4

1 回答 1

1

除了禁用窗口之外,您可以做的一件事是仅启用/禁用您在其他控件之上插入的半透明矩形,用户将无法单击任何内容。完成后,禁用它或将其 Visibility 属性设置为 Hidden。

<Window>
    <Grid>
        <TextBox Text="Hello" HorizontalAlignment="Left" VerticalAlignment="Top" ></TextBox>
        <Rectangle Fill="DarkGray" Opacity="0.5" />
    </Grid>
</Window>

现在关于您的问题需要花费大量时间,您应该使用 Visual Studio 中的“分析”菜单来分析您的应用程序。

于 2013-04-08T01:59:32.127 回答