wpf中:
window 设置  Opacity=0;
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.Timer111();
        }//此处Timer 引用的是: using System.Timers;
        Timer timer1 = new Timer(1000);
        private void Timer111()
        {
            
            timer1.Start();
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            
        }
        
        private void timer1_Elapsed(object sender, EventArgs e)
        {//在这里会出现这样的错误:   调用线程无法访问此对象,因为另一个线程拥有该对象。
            if (!(this.Opacity < 1))
            {
                timer1.Stop();
            }
            this.Opacity += 0.1;
        }谁能帮我解决下这个问题,  该如何实现程序的淡入效果? 谢谢了

解决方案 »

  1.   


    C#实现窗体淡入淡出效果的几种方法
    1.
      private   void   Form1_Load(object   sender,   System.EventArgs   e)   
      for(double   d=0.01;   d<   1;   d+=0.02)   
      {   
      System.Threading.Thread.Sleep(1);   
      Application.DoEvents();   
      this.Opacity=d;   
      this.Refresh();   
      }
     
    2.
      private   void   timer1_Tick(object   sender,   System.EventArgs   e)   
      {   
      this.Opacity   =   WinShow   ;   
      WinShow   +=   0.1   ;   
      if(WinShow   >=1   )   
      {   
      timer1.Dispose   ();   
      }   
      }
     
    3.
    用循环或计时器,   
      frmForm   myForm=new   frmForm()   
      frmForm.Opacity=0;   
      frmForm.show();   
      for(int   i=0;i<100;i++)   
      {   
      Application.DoEvents()   
      frmForm.Opacity=i/100;   
      }
     
    4.
      #region     ********   窗体淡入效果函数       ********   
      private   double   WinShow   =   0;//用于窗口淡入效果的变量   
        
      private   void   FormShow(System.Windows.Forms.Form   Curfrm)   
      {   
      Curfrm.Opacity   =   WinShow   ;   
      WinShow   +=   0.01;   
      if(WinShow   ==   1)   
      {   
      Curfrm.timerShow.Stop   ();   
      }   
      }   
        
      #endregion   
        
      #region     ********   窗体淡入效果函数调用示例       ********   
      //实现窗口的淡入效果   
      private   void   timerShow_Tick(object   sender,   System.EventArgs   e)   
      {   
      //timerShow,这是一个timer控件名称;把timerShow.interval=100就可以了。   
      FormShow(this);   
      }   
      #endregion
      

  2.   

    WPF中实现 淡入淡出差不多不用再需要写太多代码去控制循环之类的..using System.Windows.Media.Animation;  
    private void Window_Loaded
    (object sender, RoutedEventArgs e) 
    {  
    //淡入效果this.Opacity = 0; 
    DoubleAnimation OpercityAnimation = 
    new DoubleAnimation(0.01, 1.00, 
    new Duration(TimeSpan.FromSeconds(1))); 
    this.BeginAnimation(Window.
    OpacityProperty, OpercityAnimation);}  
      

  3.   

    我X,楼主,你太有才了...............WPF程序被你写成这样,My God............汗.狂汗...瀑布汗......窗口要允许透明:Background="Gray" AllowsTransparency="True" WindowStyle="None"动画用Timer做?My God.......DoubleAnimation da = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(1));
    this.BeginAnimation(Window.OpacityProperty, da);或者用Storyboard......
      

  4.   

    那实现 淡出 效果 为什么我下面写的方法 不可以了
     private void Danchu()
            {
                //淡入效果this.Opacity = 1; 
                DoubleAnimation OpercityAnimation = new DoubleAnimation(1, 0.00, new Duration(TimeSpan.FromSeconds(10)));
                this.BeginAnimation(Window.OpacityProperty, OpercityAnimation);        }        private void btn_Close_Click(object sender, RoutedEventArgs e)
            {
                this.Opacity = 1;
                this.Danchu();
                this.Close();
            }能指点下 迷津谢谢了。。
      

  5.   


    我当你 是 赞美我 呵呵  第一次 用wpf  编程, 有很多的东西不懂, 写的代码也乱七八糟的。。谢谢 指导, 我会改进的