bool stope=false;void btnCancle_Click(object sender, EventArgs e)
{
if(!stope)
     业务1
if(!stope)
     业务2
……..
if(!stope)
     业务N
}

解决方案 »

  1.   

    写个循环,里面switch,case
    for(int i=0;i<n;i++)
    {
    switch(i)
    {
    case 0:
    //执行业务1
    break;
    case 1:
    //执行业务2
    break;
    }
    if(stop)
    {
    break;
    }
    }
      

  2.   

    重构吧,把每一个业务抽出来集成一个接口。
    再定义一个业务管理类在执行这些接口,最终这个管理类通过Foreach来顺序执行这些业务,每次Foreach都判断下if(IsCancel) break;
    这样也有利于之后的业务扩展吧?简单来说就是这样:public interface ITask
    {
        void exec();
    }
    public class BusinessTask : ITask
    {
        public void exec()
        {
            // 执行业务
        }
    }
    public class BusinessManager
    {
        public bool IsCancel
        {
            get;
            set;
        }
        public void RunTask(ITask[] tasks)
        {
            if (tasks != null)
            {
                foreach (ITask task in tasks)
                {
                    if (IsCancel)
                        break;
                    task.exec();
                }
            }
        }
    }
      

  3.   

    调用:BusinessManager bm = new BusinessManager();
    bm.RunTask(new BusinessTask[] { new BusinessTask(), new BusinessTask() });
    Thread.Sleep(1000);// 假设这里是用多线程执行任务。
    bm.IsCancel = true;