110,538
社区成员
发帖
与我相关
我的任务
分享
private static Dictionary<string, WeakReference> _store;
...
internal IControl GetControl(string name)
{
IControl control = null;
if (_store.ContainsKey(name))
{
control = _store[name].Target as IControl;
if (control == null)
{
control = CreateControl(name);
_store[name].Target = control;
}
}
else
{
control = CreateControl(name);
_store.Add(name, new WeakReference(control));
}
return control;
}
Form1:
private void toolStripButton2_Click(object sender, EventArgs e)
{
ControlsManager mgr = ControlsManager.Instance;
IControl ctr = mgr.GetControl("Listings");
this.Text = ctr.Name;
ctr.DisplayOn(panel1);
}
UserControl:
public partial class ucListings : UserControl,IControl
{
...
private void toolStripButton1_Click(object sender, EventArgs e)
{
_parent.Controls.Remove(this);
//问题:我这里Disposed了,并且我再执行了GC.Collect();
//但是这个玩意却依然存活在ControlsManager里相应的WeakReference中.
//为什么WeakReference依然保存着这个Control?是不是什么地方还有强引用?在哪儿?
//我怎样在这里完全释放掉这个Control?
this.Dispose();
}