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



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

开始测试.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 链接

最新更新