我只是看不出原因,而我的代码就像这样
private int getRandomId(string idpool)
{
Random rnd = new Random();
int id = rnd.Next(1, 9999);
if (idpool == "vm")
{
if (vms != null)
{
foreach (VirtualMachine vm in vms)
{
if (vm.id == id)
{ return 0; }
}
return id;
}
}
if (idpool == "job")
{
if (vms != null)
{
foreach (VirtualMachine vm in vms)
{
foreach (Job job in vm.jobs)
{
if (job.id == id)
{ return 0; }
}
}
return id;
}
}
return 0;
}
代码2。
int id;
if (jobCreate_monday.Checked)
{
id = getRandomId("job");
while (id == 0)
{ getRandomId("job"); }
current_vm.jobs.Add(new Job(id, jobCreate_start.Value.Hour, jobCreate_start.Value.Minute, jobCreate_stop.Value.Hour, jobCreate_stop.Value.Minute, "Monday"));
}
if (jobCreate_tuesday.Checked)
{
id = getRandomId("job");
while (id == 0)
{ getRandomId("job"); }
current_vm.jobs.Add(new Job(id, jobCreate_start.Value.Hour, jobCreate_start.Value.Minute, jobCreate_stop.Value.Hour, jobCreate_stop.Value.Minute, "Tuesday"));
}.......more days.
现在如果只检查星期一或星期二,一切都很好。 一旦检查了其中两个或更多,程序冻结。 也许我没有看到明显的东西?
最好的问候。答案 0 :(得分:4)
您永远不会将id分配给循环中的随机ID
id = getRandomId("job");
while (id == 0)
{ getRandomId("job"); }
应该是
id = getRandomId("job");
while (id == 0)
{ id = getRandomId("job"); }