我正在尝试将文本从线程更新到主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();
});
答案 0 :(得分:0)
您应该在WP 8.1中使用CoreDispatcher
CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
//UI code goes here
}
);
请参阅有关CoreDispatcher