当前位置:编程学习 > C#/ASP.NET >>

Winform 窗体假死的问题

各位高人:
 
   界面中框架是这样的:主窗体放置一个TabControl, 每创建一个子窗体都放到TabControl的一个page中。
   page1子窗体: 放置3个DataGridView, 数据量不大,每个最多也就30多条,没有动态刷新加载什么的。
   page2子窗体:同上。但是page2窗体可以由用户选择执行一个计算,计算完成后显示结果。
   
   问题现象:当执行完page2的计算后,再点击page1时,窗体就假死了,可以听到cpu嗡嗡的。但却是都执行完了计算结果了。而且数据量都在100条之内,很少。page1只显示一个datagridview,如果拖动一下,或许能复原,但是很多时候就没响应了。

请大侠们指点。 --------------------编程问答-------------------- 从描述无法判断.

是否计算没有完成?

是否阻塞了UI线程

是否在page1 Control.GotFocus做了什么动作?

是否有在不断的重绘UI? --------------------编程问答-------------------- window from下面DataGridView绑定100条很多了,感觉上去是很慢的,如果网速再差点就没法看了。分页吧 --------------------编程问答--------------------
先谢过兄台。


是否计算没有完成?
---------确实计算完成了。

是否阻塞了UI线程
---------这个不太明白。

是否在page1 Control.GotFocus做了什么动作?
--------这个倒是有个事件,是加载一个菜单而已。没有其他。

是否有在不断的重绘UI?
--------page1中的几个datagridview都已经绘成,我点到别的标签页再回来,还需要重绘么?

--------------------编程问答-------------------- Page1内部是否也有一些计算或者其他什么的
而且Page2中的计算过程以及完成的过程需要确定好,
可以自己调试一下
建议学习了解下多线程的应用,使用多线程的方法来实现~ --------------------编程问答--------------------
引用 2 楼 lvxianda 的回复:
window from下面DataGridView绑定100条很多了,感觉上去是很慢的,如果网速再差点就没法看了。分页吧

100多条就多了啊?这个我还真没经验。不过3个DataGridView每个不超过30条的。3个加起来100条不到。 --------------------编程问答--------------------
引用 4 楼 wpfLove 的回复:
Page1内部是否也有一些计算或者其他什么的
而且Page2中的计算过程以及完成的过程需要确定好,
可以自己调试一下
建议学习了解下多线程的应用,使用多线程的方法来实现~


兄好,page1没计算,都是已经生成的数据,我只是点击page2执行以下计算,计算结果完成后,显示正常,我在点回page1,就没响应了。
多线程感觉用不到呢,因为根本不是同时进行的。操作完page1采取操作page2.然后再回来。不存在二者同时进行的可能。 --------------------编程问答-------------------- 恩,你可以试试使用多线程。

public bool working;
public static void threadworks() 
{
      while (working)
      {
             // 你要做的;
      }
}

初始化函数内:
working = true;
Thread thread = new Thread(new ThreadStart(threadworks));
thread.Start();

启动线程:
working = true;
thread.Start();
退出线程:
working = false;
thread.join();

这样的 --------------------编程问答-------------------- 自己顶一下,大家在看看 --------------------编程问答-------------------- 除了建议使用多线程外,你可以试试排除法,一点点来排除是什么问题,你可以将page1的业务逻辑先全部清除,然后试试,如果正常那就是page1有其问题,否则就是page2,然后再一点点做排除~ --------------------编程问答-------------------- 在你怀疑还可能额外执行的每一个方法的第一行,加一个Debug.Print,打印当前的方法名、参数值。

然后执行你的程序,重现你的问题。

打开vs的调试中的“结果”窗口,看看打印的方法调用日志。看看有什么方法正在拼命地被循环调用着。 --------------------编程问答-------------------- 肯定是你 page2 做什么事情的时候死循环了,这个要具体看你的代码的,你这么说,说不清楚的,我们也不清楚 --------------------编程问答-------------------- 异 步 编 程 --------------------编程问答-------------------- 用回调吧,给你个例子
http://download.csdn.net/detail/hu1990728/6470589 --------------------编程问答-------------------- 多线程+委托。曾经加载过60000行 + 30列的数据,大概211M --------------------编程问答-------------------- 是不是在什么地方调用啊,调试一下看看吧,别人能给你的帮助不大
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,