第二个timer.Start()没有被第一个计时器滴答声触发

时间:2017-09-26 11:33:29

标签: c# winforms timer

所以我在表格的右下角有一个小徽标,我希望以预设的速度淡入淡出,每个淡入淡出约6秒。我已经尝试了几种不同的方法,但是一旦第一个计时器完成,我再也无法让图片再次淡入。这是我的2个计时器及其各自的滴答方法的代码。

编辑现在包括计时器的声明。

Object.assign(obj, obj)

关于为什么第二个计时器无法启动的任何想法?我使用了断点,alpha级别确实达到了255,但它没有触发第二个Tick事件。

1 个答案:

答案 0 :(得分:1)

我引用的链接中描述的方法适用于我:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        test();
    }
    System.Timers.Timer fade = new System.Timers.Timer(50);
    System.Timers.Timer fade2 = new System.Timers.Timer(50);
    Image originalImage = Image.FromFile(@"D:\kevin\Pictures\odds&Sods\kitchener.jpg");

    int alpha = 100;

    void test()
    {
        fade.Elapsed +=new System.Timers.ElapsedEventHandler(fade_Tick);
        fade2.Elapsed+=new System.Timers.ElapsedEventHandler(fade_Tick_Two);
        fade.Start();

    }
    delegate void timerDelegate(object sender, EventArgs e);
    private void fade_Tick(object sender, EventArgs e)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new timerDelegate(fade_Tick), sender, e);
            return;
        }
        if (alpha >= 0)
        {
            picboxPic.Image =  SetImgOpacity(originalImage, alphaToOpacity(alpha));
            picboxPic.Invalidate();
            alpha--;
        }
        if (alpha < 0)
        {
            alpha = 0;
            fade.Stop();
            fade2.Start();
        }
    }
    private void fade_Tick_Two(object sender, EventArgs e)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new timerDelegate(fade_Tick_Two), sender, e);
            return;
        }
        if (alpha <= 100)
        {
            picboxPic.Image = SetImgOpacity(originalImage, alphaToOpacity(alpha));
            picboxPic.Invalidate();
            alpha++;
        }
        if (alpha > 100)
        {
            alpha = 100;
            fade2.Stop();
            fade.Start();
        }
    }

    float alphaToOpacity(int alpha)
    {
        if (alpha == 0)
            return 0.0f;

        return (float)alpha / 100.0f;
    }

    //Setting the opacity of the image
    public static Image SetImgOpacity(Image imgPic, float imgOpac)
    {
        Bitmap bmpPic = new Bitmap(imgPic.Width, imgPic.Height);
        Graphics gfxPic = Graphics.FromImage(bmpPic);

        ColorMatrix cmxPic = new ColorMatrix();
        cmxPic.Matrix33 = imgOpac;
        ImageAttributes iaPic = new ImageAttributes();
        iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
        gfxPic.DrawImage(imgPic, new Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, iaPic);
        gfxPic.Dispose();

        return bmpPic;
    }
}

代码有点粗糙,当你关闭表格时你需要处理掉处理,但它会逐渐淡化,其余部分可以很容易地处理 - 我也更快地进行了测试' cos life简短: - )