Код ниже взят из доказательства разработчика, над которым я сейчас работаю:
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
...
QueueProcessor = new Task(() =>
{
while (processorrunning)
{
if (processorrunning && dq.Count != 0)
{
boxid = string.Empty;
if (dq.TryDequeue(out boxid))
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new MethodInvoker(() =>
{
if (textBox1.Text == string.Empty)
textBox1.Text = boxid;
else
textBox1.Text += Environment.NewLine + boxid;
textBox1.Refresh();
}));
}
else
{
if (textBox1.Text == string.Empty)
textBox1.Text = boxid;
else
textBox1.Text += Environment.NewLine + boxid;
textBox1.Refresh();
}
}
else
{
throw new Exception("Exception removing boxid from queue.");
}
}
else
{
trigger.WaitOne(600000, false);
}
}
});
Все условия if возвращают true. Существует правильная строка boxid, назначенная для boxid из вызова dq.TryDequeue. Все, кроме кода вызова, работает как надо. Код никогда не принимает остальное в тесте InvokeRequired.
Form1.textBox1 никогда ничего не видит. Идеи приветствуются.