Windows phone C#将文本更新到GUI mainpage.xaml.cs?

时间:2016-04-19 23:50:38

标签: c# windows-phone-8.1

我正在尝试将文本从线程更新到主GUI线程,但抛出异常,因为它位于不同的线程中。我尝试使用Dispatcher.CheckAccess(),BeginInvoke()但该项目不是Silverlight或WPF。我尝试旧样式InvokeRequired,Invoke(),但这些都不可用。

StartTest.cs:

    public StartTest(MainPage mainPage)
    {
        mainPageObj = mainPage;
    }

    public async Task RunTest(string testCase)
    {
        await Task.Run(() => RunTestCase(testCase));
    }

    public bool RunTestCase(string testcase)
    {
        switch (testcase)
        {
            case "testcase1":
                int i = 0;
                while (i < 10000)
                {
                    i++;
                }
                mainPageObj.UpdatePassFail(true);//update the main GUI
                break;

            case "testcase2":
                mainPageObj.UpdatePassFail(false);//update the main GUI
                break;
        }

        return false;
    }

Mainpage.xaml.cs:

 public void UpdatePassFail(bool pass)
    {
        try
        {             
            if (pass == true)
            {
                passCount++;
                passFailCount = passCount + failCount;

                textBlock_passTotal.Text = passCount.ToString();
                textBlock_passFailTotal.Text = passFailCount.ToString();
            }
            else if (pass == false)
            {
                failCount++;
                passFailCount = passCount + failCount;

                textBlock_failTotal.Text = failCount.ToString();
                textBlock_passFailTotal.Text = passFailCount.ToString();
            }
        }
        catch(Exception error)
        {
            textBlock_tapInfo.Text = error.Message;
        }            
    }

更新

将以下语句放在第一个if语句中后,更新的数据显示在主GUI中。

Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    textBlock_passTotal.Text = passCount.ToString();
                    textBlock_passFailTotal.Text = passFailCount.ToString();
                });

1 个答案:

答案 0 :(得分:0)

您应该在WP 8.1中使用CoreDispatcher

CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
{ 
       //UI code goes here
}
);

请参阅有关CoreDispatcher

MSDN链接