考虑此代码,对于c#中的标准Windows应用程序:
Program.cs中:
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
finally
{
MessageBox.Show("Bye !");
}
}
Run Code Online (Sandbox Code Playgroud)
From1.cs:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Click += new EventHandler(Form1_Click);
}
void Form1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
Run Code Online (Sandbox Code Playgroud)
是什么让这个表格作为根本参考?是因为静态主要方法,我猜它是,还是它还有什么呢?
如果我只是用X关闭表单,那么消息框将显示"再见",但如果我点击它则不会.(因为application.Exit()) - 我觉得奇怪的是考虑main中的finally方法.
那么主要的问题是,什么使形式对象,作为一个根源参考,所以垃圾收集器不会杀死它?
在Application.Run表单关闭之前,该方法不会终止.您将Form1作为参数的实例传递给Run它,它将成为当前正在运行的方法中的局部变量,因此也是根.
在内部Application.Run实际上创建了一个ApplicationContext包含对表单的引用:
public class ApplicationContext : IDisposable
{
public Form MainForm
{
get { /* ... */ }
set { /* ... */ }
}
public ApplicationContext(Form mainForm)
{
this.MainForm = mainForm;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
在ApplicationContext随后被提供给RunMessageLoop方法.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |