Windows 8 Windows应用商店应用程序UI-没有响应

Windows 8 Windows应用商店应用程序UI-没有响应,windows-8,Windows 8,我正在尝试设计一个在执行长时间运行的任务时仍能保持响应的UI 为此,我在VS2012中创建了一个简单的应用程序,并添加了以下类: using System.Threading.Tasks; namespace TaskTest { class Class1 { public async Task<int> Async() { //simulate a long running process

我正在尝试设计一个在执行长时间运行的任务时仍能保持响应的UI

为此,我在VS2012中创建了一个简单的应用程序,并添加了以下类:

using System.Threading.Tasks;

namespace TaskTest
{
    class Class1
    {
        public async Task<int> Async()
        {
            //simulate a long running process
            for (long x = 0; x < long.MaxValue; x++) { }
            return 1;
        }
    }
}
使用System.Threading.Tasks;
命名空间任务测试
{
一班
{
公共异步任务async()
{
//模拟长时间运行的过程
对于(长x=0;x
然后我修改了主页的LoadState()方法:

protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
    await DoLongRunningProcess();
}

private async Task DoLongRunningProcess()
{
    var id = 0;
    id = await new Class1().Async();
    await new MessageDialog(id + "").ShowAsync();
}
protected override async void LoadState(对象导航参数,字典页面状态)
{
等待DoLongRunningProcess();
}
专用异步任务DoLongRunningProcess()
{
var-id=0;
id=wait new Class1().Async();
等待新消息对话框(id+“”)。ShowAsync();
}
我希望页面在进程执行时保持响应。但是,当我运行此代码时,加载页面需要很长时间。我做错了什么


TIA

异步
不是魔法;它只是让您能够编写异步代码。特别是,
async
。您可以使用
Task.Run
来执行此操作


您可能会发现我的或有帮助的。

async
不是魔法;它只是让您能够编写异步代码。特别是,
async
。您可以使用
Task.Run
来执行此操作


您可能会发现我的或有帮助的。

那很有帮助。我做了以下更改,得到了我想要的结果:

class Class1
{
    public int Launch()
    {
        //throw new Exception("Class1 exception");
        for (var i = 0; i < int.MaxValue / 2; i++) ;
        return 1;
    }
}
Class1类
{
公共int发布()
{
//抛出新异常(“Class1异常”);
对于(var i=0;i

protected async override void LoadState(对象导航参数,字典页面状态)
{
var task=DoLongRunningProcess();
等待任务;
等待新消息对话框(task.Result+“”)。ShowAsync();
}
私有任务DoLongRunningProcess()
{
返回Task.Run(()=>newclass1().Launch());
}

页面将继续加载,并在短暂暂停后显示消息对话框。然而,现在我需要知道如何捕捉异常。如果我取消注释//抛出新异常。。。在方法Launch()中的第行,它被报告为未处理的异常。我想在主UI线程中捕获此异常(即,在方法LoadState的主体中),但我似乎无法管理它。

这很有帮助。我做了以下更改,得到了我想要的结果:

class Class1
{
    public int Launch()
    {
        //throw new Exception("Class1 exception");
        for (var i = 0; i < int.MaxValue / 2; i++) ;
        return 1;
    }
}
Class1类
{
公共int发布()
{
//抛出新异常(“Class1异常”);
对于(var i=0;i

protected async override void LoadState(对象导航参数,字典页面状态)
{
var task=DoLongRunningProcess();
等待任务;
等待新消息对话框(task.Result+“”)。ShowAsync();
}
私有任务DoLongRunningProcess()
{
返回Task.Run(()=>newclass1().Launch());
}
页面将继续加载,并在短暂暂停后显示消息对话框。然而,现在我需要知道如何捕捉异常。如果我取消注释//抛出新异常。。。在方法Launch()中的第行,它被报告为未处理的异常。我想在主UI线程(即方法LoadState的主体)中捕获此异常,但似乎无法管理它