110,534
社区成员
发帖
与我相关
我的任务
分享
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm();
child.EventTest += eventTest;//测试不存在委托时,该行注释
child.Show();
child.TriggerEvent();//测试不存在委托时,该行注释
child.Close();
}
private void eventTest()
{
}
//子窗体
public ChildForm()
{
InitializeComponent();
}
public delegate void DeEventTest();
public event DeEventTest EventTest;
public void TriggerEvent()
{
if (EventTest != null)
{
EventTest();
}
}
内存探查结果(快照1均为原始状态,未进行任何操作;快照2及之后,点击了主窗体的按钮,打开并关闭了子窗体,并点击探查器上的强制GC按钮)
原始参照:(主窗体未订阅事件,点击按钮仅打开了子窗体)
主窗体订阅了事件,但关闭时并未取消该事件。
/// <devdoc>
/// <para>
/// Disposes of the <see cref='System.ComponentModel.Component'/>
/// .
/// </para>
/// </devdoc>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed")]
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string test { get; set; }
private void Button1_Click(object sender, EventArgs e)
{
Form1 child = new Form1();
child.test = "aaaaaa";
child.ShowDialog();
child.Dispose();
string test = child.test;
string testcap = child.Text;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
this.Dispose();
}
}
}
贴一下窗体源代码,窗体设计器我就不贴了,就一个按钮。项目也就一个窗体项目,就一个窗体。