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函数不能使用的解决方法详解
|