如何停止程序在第19次运行时崩溃?

问题描述 投票:0回答:2

我正在尝试创建一个程序来绘制两张随机纸牌,但是在绘制新纸牌时不会再次绘制这两张相同的纸牌。由于某种原因,在程序的第19次运行时,窗口冻结,我必须停止并重新启动程序。我注意到,每次抽出新卡时,内存使用量都会增加到159MB,然后在第19次抽奖时,内存使用黄色“指示托管堆垃圾收集开始”下降(不知道这是否有意义,我是C#的新手,这是我的第一个GUI程序。

这里是代码和2位信息,据我所知没有评论

  1. 卡存储在名为Resource1的资源文件中>
  2. [卡被命名为“ _ [数字1-13] [套装H,C,D,S]”,例如“ _3C”是3个俱乐部
  3. namespace Card_Dealer
    {
        public partial class Form1 : Form
        {
            public string[] drawncards = new string[52];
    
            public Form1()
            {
                InitializeComponent();
            }
    
            public string randomCard()
            {
                bool valid = false;
                string cardc = "";
                int i = 1;
                string convertedcards = "";
    
                do
                {
                    cardc = "_";
                    Random random = new Random();
                    cardc += random.Next(1, 13);
                    int suit = random.Next(1, 4);
                    switch (suit)
                    {
                        case 1: cardc += "H"; break;
                        case 2: cardc += "C"; break;
                        case 3: cardc += "D"; break;
                        case 4: cardc += "S"; break;
                    }
                    cardc += "";
                    foreach (var x in drawncards.Select((value, index) => new { value, index }))
                    {
                        if (cardc == x.value)
                        {
                            valid = false;
                            break;
                        }
                        else if (x.value == null)
                        {
                            valid = true;
                            drawncards[x.index] = cardc;
                            foreach (string el in drawncards) { convertedcards += el + " "; }
                            label1.Text = convertedcards;          
                            return cardc;
                        }
                    }
                } while (valid == false);
                return "";        
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (drawncards.Contains(null))
                {  
                    string cardc = randomCard();
                    object O = Resource1.ResourceManager.GetObject(cardc);
                    card1.Image = (Image)O;
                    card1.Image = new Bitmap(card1.Image, new Size(345, 528));
    
                    string cardc2 = randomCard();
                    object J = Resource1.ResourceManager.GetObject(cardc2);
                    card2.Image = (Image)J;
                    card2.Image = new Bitmap(card2.Image, new Size(345, 528));
                }
                else
                {
                    label1.Text ="All Cards Drawn!";
                }
    
            }
        }
    }
    

我该怎么做才能阻止程序崩溃?

谢谢!

我正在尝试创建一个程序来绘制两张随机纸牌,但是在绘制新纸牌时不会再次绘制这两张相同的纸牌。由于某种原因,在程序的第19次运行时,窗口冻结,并且...

c#
2个回答
0
投票

我不确定是什么导致您的程序崩溃,我能够进行一个类和单元​​测试,该类和单元测试的功能基本上相同,但是没有UI组件。


0
投票

导致代码冻结的可能

© www.soinside.com 2019 - 2024. All rights reserved.