我正在尝试创建一个程序来绘制两张随机纸牌,但是在绘制新纸牌时不会再次绘制这两张相同的纸牌。由于某种原因,在程序的第19次运行时,窗口冻结,我必须停止并重新启动程序。我注意到,每次抽出新卡时,内存使用量都会增加到159MB,然后在第19次抽奖时,内存使用黄色“指示托管堆垃圾收集开始”下降(不知道这是否有意义,我是C#的新手,这是我的第一个GUI程序。
这里是代码和2位信息,据我所知没有评论
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次运行时,窗口冻结,并且...
我不确定是什么导致您的程序崩溃,我能够进行一个类和单元测试,该类和单元测试的功能基本上相同,但是没有UI组件。
导致代码冻结的可能