我正在努力开发一个简单的应用程序,其中包含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();
我还尝试使用第二个表单上的按钮关闭第一个表单,但这不起作用。 提前致谢。
答案 0 :(得分:0)
您无法从创建它的线程之外的线程访问控件。
OnTimedEvent
在主线程以外的线程中调用。
编辑: 试试这个
aTimer.SynchronizingObject = this;
这应该使OnTimedEvend
在创建表单的线程上运行。