2013-04-06 32 views
2

我对WPF - C#5.0,.NET4.5中的Window.IsEnabled属性有个疑问。WPF - window.IsEnabled setter长期持续时间

我有以下情形(简化):

1)形式与按钮

2)用户触发的长计算​​操作(从DB读取一些数据)

3)用户能够用新的数据

我已经实现了这个以下方式进行交互:

1)单击处理禁用的窗口(用户交互)和火灾异步操作(这可以同步进行,也没关系)

2)当异步运算完成时,窗口被ENABLED(经由myWindowInstance .IsEnabled =真

而且我的问题是:

的myWindowInstance.IsEnabled =真正需要大约20秒。我必须注意,窗口中有一个用于获取数据的dataGridView。但是,如果不禁用并重新启用赢取,则全部需要大约1秒。另一个有趣的问题是,当我连接到小型本地数据库时,win.IsEnabled设置器会很快完成。与此相反,如果我使用远程巨大的数据库,则如前所述,此操作需要20秒。在这两种情况下,我只读取100行。

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

很多感谢任何想法!

+0

你有没有解决这个问题或找到这种行为的原因?我有类似的经历...... – klawusel 2015-10-06 09:31:07

回答

1

有一件事你可以做而不是禁用你的窗口,只是启用/禁用你插入其他控件顶部的半透明矩形,用户将无法点击任何东西。 完成后,禁用它或将其可见性属性设置为隐藏。

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

现在对于大量的时间花费您的问题,你就应该剖析使用Visual Studio中的“分析”菜单应用程序。