我对WPF中的Window.IsEnabled属性有疑问 - C#5.0,.NET4.5。
我有以下场景(简化):
1)带按钮的表格
2)用户触发长计算操作(从DB获取一些数据)
3)用户能够与新数据交互
我已经实现了以下方式:
1)Click处理程序 DISABLES 窗口(用于用户交互)并异步触发操作(这可以同步进行,无关紧要)
2)当异步操作完成后,窗口 ENABLED (通过 myWindowInstance.IsEnabled = true )
我的问题是:
myWindowInstance.IsEnabled = true大约需要20秒。我必须注意窗口中有一个dataGridView用于获取数据。但是,如果没有禁用和重新启用胜利,这一切都需要大约1秒。另一个有趣的一点是,当我连接到小型本地数据库时,win.IsEnabled setter很快完成。与此相反,如果我使用远程大型数据库,则如上所述,此操作需要20秒。在这两种情况下,我只获取100行。
有没有人知道为什么简单的setter花了这么多时间?
非常感谢任何想法!
答案 0 :(得分:1)
你可以做的一件事就是禁用你的窗口只是启用/禁用你插入其他控件之上的半透明矩形,用户将无法点击任何内容。 完成后,要么禁用它,要么将其Visibility属性设置为Hidden。
<Window>
<Grid>
<TextBox Text="Hello" HorizontalAlignment="Left" VerticalAlignment="Top" ></TextBox>
<Rectangle Fill="DarkGray" Opacity="0.5" />
</Grid>
</Window>
现在考虑到您的问题所花费的大量时间,您应该使用Visual Studio中的“分析”菜单来分析您的应用程序。