C# 在wp7中使用调度程序

C# 在wp7中使用调度程序,c#,windows-phone-7,C#,Windows Phone 7,我想在我的应用程序中使用Dispatcher,但此操作无法运行 我的密码在这里 private void LoadPage() { Dispatcher.BeginInvoke(() => { TextBlock temp = new TextBlock(); temp.TextWrapping = TextWra

我想在我的应用程序中使用Dispatcher,但此操作无法运行 我的密码在这里

 private void LoadPage()
        {
            Dispatcher.BeginInvoke(() =>
                    {
                        TextBlock temp = new TextBlock();
                        temp.TextWrapping = TextWrapping.Wrap;
                        temp.TextAlignment = TextAlignment.Right;
                        temp.FontSize = 32;
                        temp.Text = "";
                        for (int i = 0; i < word.Length; i++)
                        {
                            temp.Text = temp.Text + " " + word[i];
                            temp.UpdateLayout();
                            temp.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
                            if (temp.ActualHeight < 600)
                                text = text + " " + word[i];
                            else
                            {
                                pages.Add(text);
                                temp.Text = "";
                                text = "";
                            }
                        }
                        if (text != "")
                            pages.Add(text);
                    });
        }
但总是在while循环的第二次中断之后 但如果没有线程和调度程序,我的应用程序运行良好,没有任何问题
我哪里弄错了?我不知道:(

您的代码实际上没有多大意义。您正在启动一个线程,然后立即编组回UI线程。看起来您的任何代码都无法在UI线程之外执行,因此不清楚启动一个新线程时您试图实现什么

我怀疑您对线程的工作方式也有点困惑。您的代码可能在线程启动之前就开始执行while循环,也就是说,它可以很容易地调用
t.start()
,然后在调用
LoadPage
之前进入while循环。

您的应用程序现在是如何工作的

UI Thread       | Second thread
====================================   
create and run  |
thread          |
---------------------------------------
waiting         | shedule your dispatcher code 
                | for executing on ui thread
------------------------------------------              
waiting         | finishing (t.IsAlive now is true)
------------------------------------------
waiting count=0 |
....
waiting count=0 |
....            |
(until End      |
of the World)   |
Lambda,传递给调度程序,从未执行过

问题在于,Dispatcher不并行执行代码,它调度在UI线程上执行的代码,因此只有在当前UI线程任务完成后才会执行(在您的例子中,这是一个while循环)

因为在大多数情况下任务都很小,这会产生并行工作的错觉,但它只是一个代理队列,一个接一个地执行

要知道我如何修复它,我需要知道你想要实现什么,因为我不理解这段代码的全部思想。 为什么不能用调度程序代码代替线程和等待循环

UI Thread       | Second thread
====================================   
create and run  |
thread          |
---------------------------------------
waiting         | shedule your dispatcher code 
                | for executing on ui thread
------------------------------------------              
waiting         | finishing (t.IsAlive now is true)
------------------------------------------
waiting count=0 |
....
waiting count=0 |
....            |
(until End      |
of the World)   |