Control.Invoke不调用

时间:2018-05-02 14:58:40

标签: c# task

以下代码来自我目前正在进行的开发证明:

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。从dq.TryDequeue调用中有一个有效的boxid字符串分配给boxid。除了调用代码之外的所有内容都可以正常工作。代码永远不会在InvokeRequired测试中使用else。

Form1.textBox1永远不会看到任何东西。欢迎提示。

0 个答案:

没有答案