形式转换很慢

时间:2015-06-30 15:18:33

标签: c# multithreading forms

当我点击按钮时,我的表单转换很慢,我使用线程来形成一个表单效果,形成不透明度从0.1开始并增加数字。然后我有一个方法并从线程中的Form_Load启动方法。

private void RunTimer_Tick_Things()
    {
        if (flag)
        {
            while (this.Opacity <= cs.CheckMaxOpacityValue())
            {
                Thread.Sleep(cs.GetTimerSleepNumberToIncreaseOcacity());
                if (this.Opacity == cs.CheckMaxOpacityValue())
                {
                    thrdTimer.Abort();
                    break;
                }
                this.Opacity += cs.GetIncreasedOpacityValue();

            }

        }
        else
        {
            while (this.Opacity >= cs.CheckMinOpacityValue())
            {
                Thread.Sleep(cs.GetTimerSleepNumberToDecreaseOpacity());
                this.Opacity -= cs.GetDecreasedOpacityValue();
            }

            thrdTimer.Abort();

        }
    }

我有这种形式的按钮打开另一种形式。喜欢这个

private void button2_Click(object sender, EventArgs e)
    {
        Form2DatabaseSetup frm2 = new Form2DatabaseSetup();
        StopThread();
        this.Hide();
        frm2.Show();
        flag = false;

    }

我的问题是,当我点击此按钮时,第二种形式正在缓慢打开。 考虑一下,单击按钮,然后隐藏第一个表单并等待1.5秒,然后打开第二个表单。 注意:第二种形式有线程和相同的功能。

有没有人经历过这个或者知道,对此案有所了解?

1 个答案:

答案 0 :(得分:0)

起初我认为你的不透明度增加了0.01,所以15 * 100 = 1.5就是你所描述的,但是你发送的值后我可以看到增加的是0.06,所以我觉得你有一些问题所有的功能你有(GetTimerSleepNumberToIncreaseOcacity,GetIncreasedOpacityValue)。

尝试代替使用硬编码值的函数并逐步完成,

我使用此代码并且工作正常:

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

    private void button1_Click(object sender, EventArgs e)
    {
        var f = new Form2();
        f.Show();
        new Thread(() =>
        {
            while (f.Opacity < 1)
            {
                Thread.Sleep(15);
                //if (this.Opacity == cs.CheckMaxOpacityValue())
                //{
                //    thrdTimer.Abort();
                //    break;
                //}
                f.Invoke((Action)delegate { f.Opacity += 0.06; });

            }

        }).Start();
    }
}