C# Can';t输出到textblock,但messagebox工作

C# Can';t输出到textblock,但messagebox工作,c#,visual-studio-2010,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

我在输出到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.
        }
    }
private void ReadData()
{
双首字母=0;
int iHeading=0;
字符串sString=“”;
当(!停止)
{
//前进
result=fsuipc.fsuipc_Read(0x0580,4,ref-token,ref-dwResult);
结果=fsuipc.fsuipc_过程(参考dwResult);
结果=fsuipc.fsuipc_Get(ref-token,ref-dwResult);
dHeading=dwResult;
如果(标题!=0)
{
首字母=首字母*360/(65536.0*65536.0);
iHeading=转换为32(dHeading);
}
如果(i标题<0)
{
iHeading=360+转换为32(dHeading);
}
如果(i标题==0)
{
i标题=360;
}
如果(结果==true&&i标题<10)
{
sString=“00”+转换为字符串(i标题);
}
如果(结果==true&&i标题>=10&&i标题<100)
{
sString=“0”+转换为字符串(i标题);
}
如果(结果==true&&i标题>=100)
{
sString=转换为字符串(iHeading);
}
txbHeading.Text=sString;
//但是如果我将这一行更改为MessageBox.Show(sString);
//它很好用。
}
}
程序冻结了,我对此无能为力。我必须在VS中阻止它。 如果我将txbHeading.Text=sString更改为MessageBox.Show(sString),它可以正常工作

请注意,我刚从C开始。 提前谢谢

试试看

this.Invoke(新操作(()=>txbHeading.Text=sString))

相反。我假设您在UI线程之外运行

更多信息:

试试看

this.Invoke(新操作(()=>txbHeading.Text=sString))

相反。我假设您在UI线程之外运行


更多信息:

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

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

问题出在哪里?有错误吗?或者行被执行,但屏幕上什么也没有发生?什么意思,工作正常?是否出现异常?注释掉函数的整个主体并添加txbHeading.Text=“asdf”以检查是否可以在该上下文中设置textblock文本。如果没有,那么您需要调查为什么没有,如果是,那么您需要找出为什么sString不会显示。问题是什么?有错误吗?或者行被执行,但屏幕上什么也没有发生?什么意思,工作正常?是否出现异常?注释掉函数的整个主体并添加txbHeading.Text=“asdf”以检查是否可以在该上下文中设置textblock文本。如果不是,那么您需要调查为什么不是,如果是,那么您需要找出为什么sString不会显示。是的,它会在几秒钟后停止响应。那么我如何使用后台工作人员呢?我从来没有使用过它,我也不理解互联网上说的每一句话。是的,它会在几秒钟后停止响应。那么我如何使用后台工作人员呢?我从来没有用过它,我也不明白互联网上说的每一句话。