繁体   English   中英

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

[英]Windows phone C# updating text to GUI mainpage.xaml.cs?

我正在尝试将文本从线程更新到主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();
                });

您应该在WP 8.1中使用CoreDispatcher

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

请参阅有关CoreDispatcher MSDN链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM