簡體   English   中英

如何使用Dictionary在C#中實現對象可重用性

[英]How to achieve object re-usability in C# using Dictionary

這是我的代碼。 問題在下面解釋。 我正在嘗試使用字典將Java中的哈希映射對象重用到C#。

表格1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 bb = (Form2)UiFac.loadUi();
    }
}

表格2

public partial class Form2 : Form
{
    int a = 1;
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Console.WriteLine(a.ToString());
        a++;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Application.ExitThread();
    }

    public Form2 getForm2()
    {
        return this;
    }
}

UiFac

public class UiFac
{
    public enum UiName
    {
        LOGIN,
        HOME
    }
    static Dictionary<UiName,Form> map = new Dictionary<UiName, Form>();

    public static Form loadUi()
    {
        Form theForm;
        map.TryGetValue(UiName.HOME, out theForm);
        if (shit == null)
        {
            Form2 bb = new Form2();
            Console.WriteLine("Inside if " + bb.GetHashCode());
            map.Add(UiName.HOME, bb);
            bb.Show();
        }
        else
        {
            map.TryGetValue(UiName.HOME,out theForm);
            Console.WriteLine("Inside else " + shit.GetHashCode());
            Form2 ff = (Form2)theForm;
            ff = ff.getForm2();
            ff.Show();
        }
        return theForm;
    }
}

我是使用Java中的哈希映射完成此操作的,它可以完美運行。 然后,我需要使用C#進行相同的操作。 當我在第一時間在Form1中按Button1時,將加載Form2 但是,當我關閉它並再次在Form1Button1 ,它將System.ObjectDisposedException' in System.Windows.Forms.dll引發System.ObjectDisposedException' in System.Windows.Forms.dll

我想念什么?

謝謝!

如果在窗體上調用Close() ,它將最終被框架處理。 請改用Hide()方法。

文檔

關閉表單后,將釋放對象內創建的所有資源,並處置該表單。

如NightOwl在評論中所述,我建議您在關閉應用程序時通過字典循環並關閉或處置所有存在的表單,以避免資源泄漏。 您可以通過在UiFac類中實現IDispose接口並在集合中的所有表單上調用Dispose來實現:

public sealed class UiFac : IDisposable
{
    ...

    public void Dispose()
    {
        // Call dispose on all forms
    }
}

在關閉Form1調用UiFac.Dispose();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM