2

我有一个递归函数和两个事件(Going_inComing_out)。

Going_in每次函数调用自身时,我都会使用该事件来递增进度条,并且Coming_out每次函数从递归返回时,我都会使用该事件来递减进度条。

现在我必须合并Going_inComing_out一个事件中。我怎样才能做到这一点?

提前致谢!

这是代码的一部分。

Form1.cs

   .....
   void ProgressBar_increment(object sender, EventArgs e)
    {
        progressBar1.Value++;

    }
    void ProgressBar_decrement(object sender, EventArgs e)
    {
        progressBar1.Value--;
    }
   public void button2_Click(object sender, EventArgs e)
    {
        initialize();
        label3.Visible = false;
        int wait_time = telltime();
        int number = reading();

        Facto mth;


        mth = new Facto(label3, wait_time, progressBar1);

        mth.Going_in += new EventHandler(ProgressBar_increment);
        mth.Coming_out += new EventHandler(ProgressBar_decrement);


        int result = mth.Factorial(number);

        string display = result.ToString();


        label3.Visible = true;

        label3.Text = display;
    }

事实.cs

public event EventHandler Going_in;
public event EventHandler Coming_out;

........

public int Factorial(int number_to_calculate)
    {


        int Result;

        if (Going_in != null)
        {
            Going_in(this, new EventArgs());
        }


         System.Threading.Thread.Sleep(wait_time);
        if (number_to_calculate == 0)
        {
            if (Coming_out != null)
            {
                Coming_out(this, new EventArgs());
            }

            return 1;

        }
        else
       {
           Result = (number_to_calculate * Factorial(number_to_calculate - 1));
           if (label_for_output != null)
           {
               label_for_output.Visible = true;
               label_for_output.Text = Result.ToString();
               label_for_output.Update();
           }
           else 
               Console.WriteLine(Result);

       }


        if (Coming_out != null)
        {
            Coming_out(this, new EventArgs());
        }
        System.Threading.Thread.Sleep(wait_time);



        return Result;
    }
4

1 回答 1

4

这就是EventArgs它们的用途。在对象中放入一些变量EventArgs(或为此目的创建自己的变量),您可以从中确定是增加还是减少(enum也许?)

即(可能的伪代码警报)

if (Going_in != null)
{
   CustomEventArgs cea = new CustomEventArgs();
   cea.Type = Type.Decrement;
   Going_in(this, cea);
}

在您的活动中,请执行以下操作:

void ProgressBar_DoProgress(object sender, CustomEventArgs e)
 {
    if(e.Type == Type.Increment)
       progressBar1.Value++;

    if(e.Type == Type.Decrement)
       progressBar1.Value--;
 }
于 2012-07-30T09:30:50.577 回答