【问题标题】:WinForm freezes while opening a UserControlWinForm 在打开用户控件时冻结
【发布时间】:2013-08-03 17:31:12
【问题描述】:

我有一个 WinForm,其中包含显示用户控件的导航菜单。现在一切正常,除了当我尝试从另一个 UserControl 打开 Devexpress UserControl 时表单冻结。

这是我使用的代码:

private void btnOpenUserControl2_Click(object sender, EventArgs e)
{  
   UserControl2 uc2 = new UserControl2(ID);

   this.Parent.Controls.Add(uc2);
   uc2.Dock = DockStyle.Fill;
   this.Hide();
   uc2.Show(); 
}

可能的原因是什么?

【问题讨论】:

  • 拨打this.Hide()的原因是什么?
  • 我的假设是在显示 UserControl2 之前隐藏当前的 UserControl。但是,我可以把它拿出来,对吧?
  • @aby 是的,把它拿出来
  • 即便如此,问题依然存在
  • @aby 你在uc2的构造函数或加载事件中有什么?

标签: c# .net winforms devexpress


【解决方案1】:

解决此问题的方法是在服务器模式下使用 GridLookupEdit 控件。在这种情况下,gridLookupEdit 将仅从数据库中加载一小部分数据,并在您滚动网格时继续加载数据。了解如何在服务器模式下调整gridLookupEdit,请参考Server Mode话题。

【讨论】:

    【解决方案2】:

    表单冻结很可能是以下两种情况之一: 在你的UserControl2 中你处理一个事件(例如form_Load),在那个事件中你有一个无限循环。另一个原因是你有一些处理过的异常,或者一个很长的流程,非常长的流程,这会导致你的程序运行缓慢,以至于你认为它被卡住了。

    无论如何,如果您分享您的UserControl2 代码,将会非常有帮助。但是如果你只是在程序卡住时在VS中调试它时暂停程序并查看它卡在哪里,会更容易。从那里开始应该很容易

    【讨论】:

    • 你说得对,我发现绑定超过 50,000 行的 DevExpress LookUpEdit 控件花费的时间比预期的要长。知道我应该如何解决这个问题吗?
    • @aby,打开另一个线程并在该新线程(后台线程)中运行这 50,000 行。这样用户界面就不会冻结。如果您需要帮助,请看这里 - stackoverflow.com/questions/363377/…。请接受我的回答
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多