首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在winforms中立即导航窗体

在winforms中立即导航窗体
EN

Stack Overflow用户
提问于 2012-12-31 15:25:53
回答 2查看 730关注 0票数 0

我正在通过c# winforms开发一个项目。我在导航到表单时遇到了问题。

我使用的是经典的表单导航。

当我点击我的主窗体上的一个按钮时,将会打开一个新的窗体,上面有很多项。

以下是我使用的代码。

代码语言:javascript
运行
复制
frmMuayAnaEkran frm = new frmMuayAnaEkran();
frm.ShowDialog();

所以问题是表单创建太慢了。真的,打开需要8-10秒。如何解决此问题?这是我想打开的表单屏幕:http://j.mp/VRMyby

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-31 15:51:00

假设您在加载表单时要做以下事情:

代码语言:javascript
运行
复制
void LoadStartupItemsAndDataBlahBlah(object sender, DoWorkEventArgs e)
{
    int s = 0;
    for (int i = 0; i < 1000; i++)
        for (int j = 0; j < 1000; j++)
            for (int k = 0; k < 1000; k++)
               s++;
    MessageBox.Show(s.ToString());
}

如果在窗体加载中调用此方法

代码语言:javascript
运行
复制
private void Form5_Load(object sender, EventArgs e)
{
    Stopwatch t = new Stopwatch();
    t.Start();
    LoadStartupItemsAndDataBlahBlah(null,null);
    t.Stop();
    this.Text = string.Format("[{0}] mili-seconds", t.ElapsedMilliseconds);
}

您的表单将在大约5秒(5000毫秒)后运行,并显示一个显示1000000000的消息框

但是如果你在后台运行这个方法

代码语言:javascript
运行
复制
private void Form5_Load(object sender, EventArgs e)
{
    BackgroundWorker bg = new BackgroundWorker();
    bg.DoWork += new DoWorkEventHandler(LoadStartupItemsAndDataBlahBlah);
    Stopwatch t = new Stopwatch();
    t.Start();
    bg.RunWorkerAsync();
    t.Stop();
    this.Text = string.Format("[{0}] mili-seconds", t.ElapsedMilliseconds);
}

您的表单加载速度非常快,大约只需0-1毫秒,5秒后消息框将到达并显示其值1000000000

票数 1
EN

Stack Overflow用户

发布于 2012-12-31 15:30:33

我猜问题是因为您在表单构造函数或FormCreated事件中执行了一些开销很大的操作。也许你正在查询一个数据库或一些远程服务。你可能会考虑几件事:

  • 在后台线程上执行开销较大的操作。例如,您可以使用BackgroundWorker。这不会使数据显示更快,它只会提供更好的用户体验,因为表单将立即显示,数据将在稍后显示,而不会阻塞主UI
  • 优化昂贵的操作。例如,如果您正在执行SQL查询,则可能需要查看SQL分析器,以确定这些查询是否可以通过某种方式进行优化。通过将索引放在某些列上,SQL查询的运行速度是令人难以置信的。如果您正在执行HTTP请求来获取数据,您可以考虑是否可以减少这些请求的数量--通过网络发送更少返回更多数据的请求通常比发送大量返回更多数据的请求更好。
  • 您可以将昂贵操作的结果缓存到内存中,这样下次用户打开相同的表单时,他就不需要等待那么长时间就可以在您的应用程序的体系结构和导航工作流上检索这些results.
  • Depending,您可以在用户实际导航到表单之前就开始预加载一些数据。当然,应该在后台线程上再次执行此操作,以避免冻结主工作线程。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14098766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档