无法输出到textblock,但messagebox有效

时间:2013-01-25 00:43:52

标签: c# visual-studio-2010

输出到textblock时遇到问题。基本上我做的是这个:

private void ReadData()
    {
        double dHeading = 0;
        int iHeading = 0;
        String sString = "";
        while (!stop)
        {
            //Get Heading
            result = fsuipc.FSUIPC_Read(0x0580, 4, ref token, ref dwResult);
            result = fsuipc.FSUIPC_Process(ref dwResult);
            result = fsuipc.FSUIPC_Get(ref token, ref dwResult);
            dHeading = dwResult;

            if (dHeading != 0)
            {
                dHeading = dHeading * 360 / (65536.0 * 65536.0);
                iHeading = Convert.ToInt32(dHeading);
            }
            if (iHeading < 0)
            {
                iHeading = 360 + Convert.ToInt32(dHeading);
            }
            if (iHeading == 0)
            {
                iHeading = 360;
            }
            if (result == true && iHeading < 10)
            {
                sString =  "00" + Convert.ToString(iHeading);
            }
            if (result == true && iHeading >= 10 && iHeading < 100)
            {
                sString = "0" + Convert.ToString(iHeading);
            }
            if (result == true && iHeading >= 100)
            {
                sString = Convert.ToString(iHeading);
            }

            txbHeading.Text = sString;
            // But if I change this line to MessageBox.Show(sString);
            // it works fine.
        }
    }

该程序冻结,我无法用它做任何事情。我必须在VS中阻止它。 如果我将txbHeading.Text = sString更改为MessageBox.Show(sString),它可以正常工作。

请注意,我刚开始使用C#。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

代码中的while循环导致UI线程被阻塞,因此程序应该在调用方法时停止响应。 background worker允许您的代码在单独的线程中执行而不会阻止GUI。

答案 1 :(得分:1)

this.Invoke(new Action(() => txbHeading.Text = sString))

代替。我假设你在UI线程之外运行。

更多相关信息:The Practical Guide to Multithreading - Part 1