山西念星科贸有限公司 2024-05-31 14:58 采纳率: 72%
浏览 3
已结题

程序集变量在窗体关闭后自动初始化

问题遇到的现象和发生背景

程序集变量在窗体关闭后自动初始化

用代码块功能插入代码
    internal static class RegardingIncomeVouchers
    {
        internal static List<string> IncomeVoucherNumberArray = new List<string>();
    }
    public partial class revenueWindow : Form
    {
        private void revenueWindow_Load(object sender, EventArgs e)
        {
            RegardingIncomeVouchers.IncomeVoucherNumberArray.Add("1");
            RegardingIncomeVouchers.IncomeVoucherNumberArray.Add("2");
            RegardingIncomeVouchers.IncomeVoucherNumberArray.Add("3");
        }
    }
运行结果及详细报错内容

例如我上面的代码块,在revenueWindow窗体运行完毕关闭后,程序集变量-IncomeVoucherNumberArray自动初始化了

我想要达到的结果

例如我上面的代码块,在revenueWindow窗体运行完毕关闭后,程序集变量-IncomeVoucherNumberArray不初始化,就保存我在revenueWindow窗体操作后的值

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-31 14:59
    关注

    引自免费微信小程序:皆我百晓生

    为了确保RegardingIncomeVouchers.IncomeVoucherNumberArray列表在窗体关闭后保留其值,你需要了解C#中的内存管理和对象生命周期。在这种情况下,由于RegardingIncomeVouchers.IncomeVoucherNumberArray是静态成员,它将一直存在于程序的整个生命周期中,直到应用程序退出。这意味着只要你的应用程序没有结束,这个数组就会保持它的状态。

    然而,如果你的应用程序重新启动,或者你在同一运行时环境中打开多个实例,每个实例都会有自己的regvenueWindow窗口,并且它们可能会覆盖彼此对RegardingIncomeVouchers.IncomeVoucherNumberArray的更改。为了解决这个问题,你可以考虑以下两种方法来持久化数据:

    1. 使用文件存储: 当窗体关闭时,将数组内容写入一个文件,然后在窗体加载时从文件中读取数据。以下是修改后的代码示例:
    using System.IO;
    using System.Text.Json;
    
    // ...
    
    internal static class RegardingIncomeVouchers
    {
        internal static List<string> IncomeVoucherNumberArray = new List<string>();
    
        // 新增两个方法用于保存和加载数据到文件
        public static void SaveData(string filePath)
        {
            string json = JsonSerializer.Serialize(IncomeVoucherNumberArray);
            File.WriteAllText(filePath, json);
        }
    
        public static void LoadData(string filePath)
        {
            if (File.Exists(filePath))
            {
                string json = File.ReadAllText(filePath);
                IncomeVoucherNumberArray = JsonSerializer.Deserialize<List<string>>(json);
            }
        }
    }
    
    public partial class revenueWindow : Form
    {
        private void revenueWindow_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 在窗体关闭前保存数据到文件
            string filePath = "IncomeVoucherNumbers.json";
            RegardingIncomeVouchers.SaveData(filePath);
        }
    
        private void revenueWindow_Load(object sender, EventArgs e)
        {
            // 在窗体加载时从文件加载数据
            string filePath = "IncomeVoucherNumbers.json";
            RegardingIncomeVouchers.LoadData(filePath);
    
            // 继续添加你的数据(如果需要)
            RegardingIncomeVouchers.IncomeVoucherNumberArray.Add("4");
            RegardingIncomeVouchers.IncomeVoucherNumberArray.Add("5");
            RegardingIncomeVoucherNumberArray.Add("6");
        }
    }
    
    1. 使用数据库存储: 如果你的应用程序需要更复杂的数据管理,你可能想要考虑使用数据库来存储这些数据。这样可以让你在多用户或多实例环境中更好地共享和管理数据。这涉及到安装数据库、创建表结构以及编写相应的CRUD操作。对于初学者,SQLite是一个轻量级的数据库选项,可以直接在应用程序中使用。

    这里提供的代码应该满足你的需求。如果你需要关于如何使用SQLite或其他数据库的进一步指导,请告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月6日
  • 已采纳回答 5月31日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。