c# 点击button以后怎样使form不假死

因为button点击事件,需要计算的量比较大,可能会卡死半小时左右。有没有什么办法使form不成假死的状态?可以加一个类似滚动的进度条什么的吗?... 因为button点击事件,需要计算的量比较大,可能会卡死半小时左右。有没有什么办法使form不成假死的状态?
可以加一个类似滚动的进度条什么的吗?
展开
 我来答
百度网友9a5036d1d
2013-12-29 · 超过24用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:64.7万
展开全部
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication1
{

    struct Test
    {
        public event Action<int> OnStep;
        public void Run()
        {
            for(int i=0;i<100;i++)
            {
                Thread.Sleep(1000);
                if(null != OnStep)
                {
                    OnStep(i);
                }
            }
        }
    }
    class Program
    { 
        static void Main(string[] args)
        {
            Test ts = new Test();
            ts.OnStep += ts_OnStep;
            Thread t = new Thread(new ThreadStart(ts.Run));
            t.Start();
            Console.ReadLine();
            t.Abort();
        }

        static void ts_OnStep(int obj)
        {
            Console.WriteLine("current step:" + obj);
        }
    }
}

 你把main函数修改为你的按钮事件就可以了,不过在ts_OnStep中,如果要修改界面的数据,需要这样使用,不然会有异常

this.Invoke(new MethodInvoker(() =>
            {
                TimeSpan arg3 = new TimeSpan(0, 0, Int32.Parse(musicInfoList[listBox1.SelectedIndex].time));
                double second1 = arg1.TotalSeconds;
                double second2 = arg3.TotalSeconds;
                double millsec1 = arg1.TotalMilliseconds;
                double millsec2 = arg3.TotalMilliseconds;

                label2.Text = arg1.Minutes + ":" + arg1.Seconds + (arg1.Milliseconds / 1001.0).ToString(".0") + "/" + arg3.Minutes + ":" + arg3.Seconds;
                int val =(int) (progressBar2.Maximum * millsec1 / millsec2);
                if (val<progressBar2.Minimum||val>progressBar2.Maximum)
                {
                    return;
                }
                progressBar2.Value = val;
            }));
宇宙之心眼
2013-12-28 · TA获得超过623个赞
知道小有建树答主
回答量:610
采纳率:100%
帮助的人:417万
展开全部
在适当的位置加入Application.DoEvents(),释放一下CPU,然后再加入滚动条就更完美了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhang399401
2013-12-28 · TA获得超过702个赞
知道小有建树答主
回答量:1347
采纳率:0%
帮助的人:944万
展开全部
创建一个线程,在线程里面操作,这样form就不会卡死
追问
我里面大概有两个for循环
你能大概说一下怎么用多线程吗?
我还没用过多线程。。。
追答
        引入命名空间 using System.Threading;
        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(NewMethod);
            thread.IsBackground = true;
            thread.Start();
        }
        private void NewMethod() 
        {
            //处理代码,处理完后调用thread.Abort()终止线程
        }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2013-12-28 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
只能用多线程了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龙之贤sunny
2013-12-29
知道答主
回答量:34
采纳率:0%
帮助的人:20.5万
展开全部
为什么不考虑下用Jquery+一般处理程序呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式