用ShowDialog打开一个动态页面,页面里的控件(一般的自定义控件)都是动态生成,为何我用Timer设定控件定时刷新里面控件时出错,调试时是到改变Size时候出错。。
自定义控件里是
private AxShockwaveFlashObjects.AxShockwaveFlash axflash;
public void LoadData()
{
axflash.Movie=filename;
axflash.Visible=true;
axflash.Loop =true;
axflash.Play();
axflash.Size=new Size(this.Width,this.Height);
}
初始化时控件加载了数据,而用其他按钮控制可以刷新控件,但是用Timer来LoadData()就不行,到了更改Size就出错。。

解决方案 »

  1.   

    试试
    axflash.SuspendLayout();axflash.Movie=filename;
    axflash.Visible=true;
    axflash.Loop =true;
    axflash.Play();
    axflash.Size=new Size(this.Width,this.Height);axflash.ResumeLayout();
      

  2.   

    你用的是哪个Timer?如果Timer不在创建axflash的线程上时,当调用axflash.Size=new Size(this.Width,this.Height);的时候的确会出错的。改成通过委托来调用axflash.Size=new Size(this.Width,this.Height);所在的方法就可以了。
      

  3.   

    谢谢。。
    不过jingtao_zhou的方法没用。。
    我Refresh,Update,Invalidate都用了。。private System.Timers.Timer tm=new System.Timers.Timer();
    但我是直接找frm.Controls[0]来控制里面控件的啊,数据会显示,但是大小就不能控制,而且碰到Size变化就停止执行。。
      

  4.   

    个么再试试
    frm.SuspendLayout();
    axflash.SuspendLayout();axflash.Movie=filename;
    axflash.Visible=true;
    axflash.Loop =true;
    axflash.Play();
    axflash.Size=new Size(this.Width,this.Height);axflash.ResumeLayout();
    frm.ResumeLayout();
      

  5.   

    可能不是布局问题吧。。frm,UI,axflash的SuspendLayout,ResumeLayout都设置了还是没用。。一旦碰到activex控件就会停止。。用picturebox就没问题。。我想问一下,我动态生成的按钮点击改变数据没问题,但是Timer触发的就有问题。。难道真的是线程。。T_T
      

  6.   

    个么timer你放在哪里?
    如果timer放在新开的线程里面
    一般要通过Invoke来调用
      

  7.   

    解决了!
    我使用了System.Windows.Forms.Timer替代了System.Timers.Timer就解决了。。谢谢小熊,谢谢零下一度。。谢谢atv,谢谢华娱卫视。。