Код, который вы пишете, выбирает только случайные места максимум из 119 мест. Даже если вы используете старое оборудование, оно должно быть невероятно быстрым для запуска, поэтому я не понимаю, почему вам нужно показывать каждое место как оно распределено. Мне кажется, что вы должны разделить код. рассчитайте распределение мест и затем отобразите их любым удобным для вас способом.
Вот код для случайного выбора мест:
var passengers = Convert.ToInt32(txt_WeightBalance_Passengers.Text);
var numberofSeats = rdb_WeightBalance_190.Checked ? 107 : 119;
// Creates an array from 0 .. numberofSeats - 1
var seats = Enumerable.Range(0, numberofSeats).ToArray();
//Shuffle the first "passengers" elements of the array
for (var i = 0; i < passengers; i++)
{
var j = RandomNumber(0, numberofSeats);
var x = seats[i];
seats[i] = seats[j];
seats[j] = x;
}
//Find the first "passengers" count of seat controls
var controls = (
from i in seats.Take(passengers)
let c = this.Controls.Find("img_Seat_" + i, true).FirstOrDefault()
where c != null
select c
).ToArray();
Теперь, чтобы установить элементы управления сиденьем как видимые, просто сделайте это:
foreach (var c in controls)
{
c.Visible = true;
}
Если вам нужно выполнить это в фоновом режиме и обновить пользовательский интерфейс, как это можно сделать, вы можете сделать это:
var t = new System.Threading.Thread(new ThreadStart(() =>
{
foreach (var c in controls)
{
this.Invoke(new Action(() => c.Visible = true));
// Thread.Sleep(100); // Slow it down if you wish...
}
}));
t.Start();
Это работает для вас?