Я хотел бы визуализировать, как очередь при доступе к двум потокам чтения и потоку писателя растет и сжимается с помощью панели прогресса в mainform. Я буду использовать делегат, чтобы вызвать индикатор выполнения в основной форме и установить его значение в Queue.Value (Toys.lenght). Индикатор прогресса не ведет себя так, как указано, он не растет полностью, и переменные длины тоже не работают.Установите максимальное значение для индикатора выполнения для соответствия длине очереди.
public class Buffer
{
private delegate void Display(int v, ProgressBar f);
private Queue<Toy> Toys = new Queue<Toy>();
private object MyLock = new object();
private int max;
private int lenght;
private ProgressBar progressbar1;
public Buffer(ProgressBar r)
{
this.progressbar1 = r;
this.max = 10;
this.lenght = Toys.Count;
}
public void writeMethod(Toy toy)
{
lock (MyLock)
{
if (Toys.Count == max)
{
Monitor.Wait(MyLock);
}
Toys.Enqueue(toy);
Monitor.PulseAll(MyLock);
progressbar1.Invoke(new Display(Disp), new object[] {Toys.Count, progressbar1});
MessageBox.Show("Que contains these items" + lenght);
}
}
public void readMethod()
{
lock (MyLock)
{
if(Toys.Count == 0)
{
Monitor.Wait(MyLock);
}
Toys.Dequeue();
Monitor.PulseAll(MyLock);
}
}
public void Disp(int I, ProgressBar l)
{
progressbar1.Value = I;
}
}
}
Не знаете, в чем ваш вопрос. Что такое «Минимальный» и «Максимальный» диапазона выполнения? И что самое важное, вы когда-нибудь добавляли в игру «Больше»? –
Мне никогда не удавалось добавить что-либо в очередь, но индикатор прогресса растет примерно на 10% от бара. Моя первая мысль заключалась в том, что в progressbar migh есть некоторые настройки, которые мне нужно настроить, например: увеличьте длину полосы до 100 и чтобы она была заполнена на 10%, когда один элемент добавлен в очередь. Есть ли в этом смысл? – AV67
Мой хрустальный шар говорит, что max = 10 и progressbar1.Maximum = 100. Дико неуместный UI бит, чем больше значение * меньше * прогресс, который вы сделали. –