2015-06-30 32 views
-3

我的形态转变是缓慢的,当我点击按钮,我使用线程有一个表格效果形成不透明度从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秒,然后打开第二个窗体。 注意:第二种形式具有线程和相同的功能。

没有人有经历过或不知道,有一个关于这种情况下的知识?

+0

您可能会感兴趣的关于这个问题的答案以及:http://stackoverflow.com/questions/12497826/better-algorithm-to-fade-a-winform – Sabre

+0

你使用WinForms或WPF? –

+0

开始使用WPF ...这样的东西要容易得多。它可能会慢慢打开,因为UI线程正在激活不透明度以及显示新窗体。 –

回答

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(); 
    } 
} 
+0

谢谢@Liran,我现在试了一下,我想出了我没有写的其他问题。感谢和形式等待仍在继续。 我不能投你的评论,因为我没有15的声望。 – Emrullah

+0

只要您发现问题,就可以 – Liran