转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> C语言系列 >> 正文
C#耗时操作防界面卡死 sleep不卡屏解决方法         ★★★

C#耗时操作防界面卡死 sleep不卡屏解决方法

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2725 更新时间:2012/8/28 11:59:45

C#耗时操作防界面卡死 sleep不卡屏解决方法 情况:单线程应用程序执行某项耗时操作(如读取大文件,大批量操作数据库,网络传输等)时,会导致方法阻塞,表现在界面上就是程序卡死,界面不响应;

解决:异步调用 如果您有看不懂下面方法的,您可以与站长闵涛www.mintao.net)联系。

1.方法之一

1.1首先定义一个委托,该委托指向的方法就是要执行耗时长的操作
    public delegate string  mydelegate(int num);

1.2定义异步完成时回调的函数:
private void callBackMethod(IAsyncResult result)
{
 /*由于已经在调用BeginInvoke传递的最后一个参数是回调委托
 所以可以从操作状态中获取*/
 mydelegate my = (mydelegate)result.AsyncState;
 //EndInvoke完成回调,并处理调用返回的结果
 string temp = my.EndInvoke(result);
  //处理返回的结果temp字符串
 MessageBox.Show("完成操作。" + temp);
}

1.3主线程执行:
 private void button1_Click(object sender, EventArgs e)
{
 //AsyncCallback本质是一种委托,类似Event
 AsyncCallback callBack = new AsyncCallback(callBackMethod);
 //委托指向耗时函数
 mydelegate dele = new mydelegate(longTimeDeal);
 //最后一个参数可传任何参数,方便在回调函数中使用
 IAsyncResult ar =dele.BeginInvoke(10000, callBack, dele);
}

1.4耗时操作函数:
private string longTimeDeal(int time)
{
 int second = time / 1000;
 Thread.Sleep(time);
 return "您的耗时操作花了约:" + second + "秒钟";
}

2.方法之二
2.1首先定义一个委托,该委托指向的方法就是要执行耗时长的操作
public delegate string  mydelegate(int num);

2.2主线程执行:
private void button1_Click(object sender, EventArgs e)
{
 //AsyncCallback本质是一种委托,类似Event
  AsyncCallback callBack = newAsyncCallback(callBackMethod);
 //委托指向耗时函数
 mydelegate dele = newmydelegate(longTimeDeal);
 // BeginInvoke返回结果可用于监视异步调用进度
 IAsyncResult ar = dele.BeginInvoke(10000, null, null);
 //异步调用完成后IsCompleted返回true
  while (ar.IsCompleted == false)
 {
        Application.DoEvents();
 }
 string result = dele.EndInvoke(ar);
 MessageBox.Show(result);
}

2.3耗时操作函数:
     private string longTimeDeal(int time)
        {
            int second = time / 1000;
            Thread.Sleep(time);
            return "您的耗时操作花了约:" + second + "秒钟";
        }

闵涛最近在研究C#时找到上面的这些代码,经过多次测试发现对砍实现了不卡屏的情况,不过CPU使用率50%左右,没有关系,开发的东西能用不卡就好。如果您不能解决。您可以向闵涛请教。


[C语言系列]C# WinForm 中Label自动换行 解决方法  [电脑应用]操作无法完成。键入的打印机名不正确,或者指定的…
[建站心得]关于windows2003的IIS不能用 ””..”” 表示父目…  [Web开发]IIS 日志时间差8小时的问题的完美解决方法
[C语言系列]C#“System.Windows.Forms.ComboBox.ObjectCollec…  [网络技术]ADSL宽带猫DSL灯不亮r的解决方法
[操作系统]“终端服务器超出了最大允许连接数”的解决方法  [Web开发]Z-Blog登陆时提示“错误原因:登录失败”的解决方法
[Web开发]PHP服务器不能显示验证码的解决方法详解  [Web开发]file_get_contents函数不能使用的解决方法详解
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台