C# 加载另一个表单后关闭表单
我打算开发一个简单的应用程序,有一个主窗体和几个子窗体 首先,我创建了加载表单(加载表单有2个IMG和1个Label,1个IMG和1个GIF),该表单只工作几秒钟。接下来我创建了另一个表单(该表单应该是登录表单)。现在,我需要在加载或显示第二个表单后关闭第一个表单。以下是我的第一张表格中的代码:C# 加载另一个表单后关闭表单,c#,forms,oop,loading,C#,Forms,Oop,Loading,我打算开发一个简单的应用程序,有一个主窗体和几个子窗体 首先,我创建了加载表单(加载表单有2个IMG和1个Label,1个IMG和1个GIF),该表单只工作几秒钟。接下来我创建了另一个表单(该表单应该是登录表单)。现在,我需要在加载或显示第二个表单后关闭第一个表单。以下是我的第一张表格中的代码: public partial class Loading : Form { private static System.Timers.Timer aTimer; public Load
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();
我还试图用第二个窗体上的按钮关闭第一个窗体,但没有成功。
提前感谢。除了创建控件的线程之外,您无法从其他线程访问控件
OnTimedEvent
在主线程以外的线程中调用
编辑:
试试这个
aTimer.synchroningobject=this代码>
这将使ontimedend
在创建表单的线程上运行。此外,了解运行此代码时发生的情况也会很有帮助。@Grant-我不知道,我试图停止计时器,但没有帮助。@zmarks22加载开始,然后,突然发生了意外的事情:code
System.Windows.Forms.dll中发生了“System.InvalidOperationException”类型的异常,但未在用户代码中处理。其他信息:跨线程操作无效:控件“加载”是从创建它的线程以外的线程访问的。如果存在此异常的处理程序,则程序可以安全地继续。code
@MarkHall这是真的,但它甚至不会关闭我的整个应用程序。我试图将该表单的状态更改为“非主”,但我不知道如何更改…请不要发布与问题无关的帖子。我看不出CreateRoundRectRgn方法的结果在代码中的何处使用。这只会让阅读变得更困难。尤其是当你在带有滚动条的小窗口中阅读时。但我不能从另一个窗体关闭该窗体。我写道,我试图用另一个窗体中的按钮关闭第一个窗体,但仍然收到相同的意外错误。。。请按照我在您的问题下所描述的方式清理代码。然后显示带有行号的stacktrace(格式化)。我告诉您要尝试的代码在哪里?stacktrace在哪里?