并于引用类型的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:59:24
在C#中,所以用户自定义的类型都是引用类型。最近碰到一个问题,就是如果我有一个程序,他在启动时需要显示出一个几秒的LOGO(其实这LOGO也就是一个窗体只是上面放了张图片)。当显示时间过去时,会调用主窗体。然后LOGO窗体也就隐藏了,现在我看到的只是第二个主窗体了。这时如果我关闭这个窗体程序是不会退出的,因为LOGO窗体还在运行着。我应该如果去让程序关闭呢。谢绝告诉我使用Application.Exit(); 这个地球人都知道。

我就是想让一个引用也指向这个窗体对象,因为引用类型操作任意一个所指向的值都会随之变化的。我想用close方法去释放掉以前隐藏的那个窗体。

很简单,不要在LOGO中调用主窗体,而是在主窗体中调用LOGO。
我做了个简单的演示程序,form1是主窗体form2是LOGO,只要把form1的构造函数改成这样:
public Form1()
{
Form2 f2 = new Form2();
f2.Show();
System.Threading.Thread.Sleep(3000);
InitializeComponent();
f2.Close();
}
运行,你就可以看到,先显示LOGO,三秒后LOGO消失,主窗体显示
当然按照你的原意,你也可以把f2.Close();改为 f2.Visible = false;等主窗体关闭再f2.Close();但是LOGO一般在主窗体启动后就没有作用了,所以也就没有这个必要去改。
另外注意,显示form2的代码要放在InitializeComponent()前面,因为有可能InitializeComponent()这个过程要花费较多的时间。还有一点,f2.Close();不一定要放在构造函数里,你可以放在窗体的Load事件里。总之,原则就是,把form1最耗时的那些操作都放在 f2.Show()与f2.Close()之间,这样运行起来的感觉就最好。

首先说明你这个设计思路不够好。

我仅给你提供一个设计思路,供你参考。

你要让你的主窗口先运行,然后再去调用并显示你的LOGO窗口,这样程序结构清晰(主流的程序都是这么实现的)。

具体请看伪代码:

void main()
{
Run new MainWindow();
}

MainWindow onLoad() //在主窗体的加载事件中(此时主窗体还未显示)
{
LogoWindow.ShowDialog(); //调用此方法后主窗口线程会被阻塞直到LOG