加载另一个后关闭表格

时间:2014-04-16 20:32:53

标签: c# forms oop loading

我正在努力开发一个简单的应用程序,其中包含1个主要表单和少量子表单。

首先我创建了加载表单(加载表单有2个IMG和1个标签,1个IMG我加载GIF),该表单仅工作几秒钟。接下来我创建了另一个表单(该表单应该是登录表单)。现在我需要在加载或显示第二个表单后关闭第一个表单。这是我的第一个表格中的代码:

public partial class Loading : Form
{
    private static System.Timers.Timer aTimer;

    public Loading()
    {
        InitializeComponent();
        this.FormBorderStyle = FormBorderStyle.None;
        Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 10, 10));
        aTimer = new System.Timers.Timer();
        Random rnd = new Random();
        int loading_time = rnd.Next(2500, 4200);
        aTimer.Interval = loading_time;
        aTimer.SynchronizingObject = this; //////////////
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Enabled = true;

    }




    private void OnTimedEvent(object source, ElapsedEventArgs e)
    {
       // New Form run 1st try
        login form2 = new login();
        form2.ShowDialog();

      // New Form run 2nd try
        Application.Run(new login());

      // Loading form closing 1st try
      this.Close();

         // Loading form closing 2nd try
      Loading.Close();

我还尝试使用第二个表单上的按钮关闭第一个表单,但这不起作用。 提前致谢。

1 个答案:

答案 0 :(得分:0)

您无法从创建它的线程之外的线程访问控件。

OnTimedEvent在主线程以外的线程中调用。

编辑: 试试这个

aTimer.SynchronizingObject = this;

这应该使OnTimedEvend在创建表单的线程上运行。