WPF - 窗口.IsEnabled属性设置时间过长

3

我有一个关于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需要如此长的时间?

非常感谢任何想法!


你好,你解决了这个问题或找到了这种行为的原因吗?我有类似的经历... - klawusel
1个回答

1
与其禁用窗口,您可以在其他控件上方插入一个半透明的矩形,并启用/禁用它,这样用户就无法单击任何内容。完成后,要么禁用它,要么将其Visibility属性设置为Hidden。
<Window>
    <Grid>
        <TextBox Text="Hello" HorizontalAlignment="Left" VerticalAlignment="Top" ></TextBox>
        <Rectangle Fill="DarkGray" Opacity="0.5" />
    </Grid>
</Window>

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接