首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClickOnce System.Progress不工作

ClickOnce System.Progress不工作
EN

Stack Overflow用户
提问于 2014-01-29 15:08:17
回答 1查看 89关注 0票数 0

我使用下面的代码来调用方法并异步运行它,并在UI进行过程中提供有关它的反馈。当我在Visual中运行应用程序(在调试或发布配置中)时,将更新"lblSyncStatus“,在60秒的同步过程中显示10个不同的状态。

代码语言:javascript
复制
    public async Task SyncConfigurations()
    {
        var progressIndicator = new Progress<string>(ReportProgress);
        var repo = new SomeObject()
        var cts = new CancellationTokenSource();
        string result = string.Empty;
        bool syncCompleted = false;

        try
        {
            ReportProgress("Synchronizing user data...");
            int request = 0;
            if (Properties.Settings.Default.FirstRun)
                request = await repo.Sync(progressIndicator, cts.Token);
            else
                request = await repo.Sync(progressIndicator, cts.Token, Properties.Settings.Default.ConfigLastUpdate);

            syncCompleted = true;
            result = "Synced complete.";
        }
        catch (OperationCanceledException ex)
        {
            result = "Sync failed.";
            syncCompleted = false;
        }

        // Timestamp of sync.
        if (syncCompleted)
        {
            Properties.Settings.Default.ConfigLastUpdate = DateTime.Now;
            Properties.Settings.Default.FirstRun = false;
            Properties.Settings.Default.Save();
        }

        ReportProgress(result);
    }

    void ReportProgress(string message)
    {
        //Update the UI to reflect the progress value that is passed back.
        Application.Current.Dispatcher.Invoke(new Action(() =>
        {
            this.lblSyncStatus.Content = "Sync in progress: " + message;
        }));
    }

然而,我的问题是当我通过ClickOnce发布时。当我用ClickOnce发布时,启动应用程序并运行它,标签就永远不会更新。启动后,我就将VS调试器附加到应用程序进程中,我可以看到异步线程正在退出,因此我知道同步正在发生。UI只是没有反映这一点。

为什么在IDE中调试或发布的UI更新是正确的,而在部署之后却没有呢?我从SyncConfigurations方法中调用Window_Loaded方法,比如:Task.Run(async () => await SyncConfigurations());

如果有人能帮忙,我会很感激的!

编辑1

当我执行一个新的SyncConfigurations ()时,似乎有什么原因导致了SomeObject失败。我假设会抛出一个异常,并且它不会因为异步而冒泡。在调用该方法之后,我立即添加了以下代码:

代码语言:javascript
复制
            var sync = Task.Run(async () => await SyncConfigurations());
            if (sync.Exception != null)
            {
                throw new Exception(sync.Exception.Message + "\n" + sync.Exception.StackTrace);
            }

没有例外情况。现在,当我试图附加时,我还会收到一条来自IDE的消息,因为它不是调试版本(ClickOnce已部署了版本,我不知道如何更改它),因此无法附加。

因此,我想我的问题是,我应该如何在IDE之外调试它,在它似乎失败的地方,以及我是否正确地处理异常(如果一个异常确实被抛出)。

EN

回答 1

Stack Overflow用户

发布于 2014-01-29 17:38:29

我解决了这个问题。我发布了带有调试配置的构建,将调试器附加到进程,并能够在MyObject中找到异常并修复它。

当您需要调试ClickOnce应用程序时,您需要确保在发布之前将构建配置设置为debug。问题解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21434979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档