我使用下面的代码来调用方法并异步运行它,并在UI进行过程中提供有关它的反馈。当我在Visual中运行应用程序(在调试或发布配置中)时,将更新"lblSyncStatus“,在60秒的同步过程中显示10个不同的状态。
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失败。我假设会抛出一个异常,并且它不会因为异步而冒泡。在调用该方法之后,我立即添加了以下代码:
var sync = Task.Run(async () => await SyncConfigurations());
if (sync.Exception != null)
{
throw new Exception(sync.Exception.Message + "\n" + sync.Exception.StackTrace);
}没有例外情况。现在,当我试图附加时,我还会收到一条来自IDE的消息,因为它不是调试版本(ClickOnce已部署了版本,我不知道如何更改它),因此无法附加。
因此,我想我的问题是,我应该如何在IDE之外调试它,在它似乎失败的地方,以及我是否正确地处理异常(如果一个异常确实被抛出)。
发布于 2014-01-29 17:38:29
我解决了这个问题。我发布了带有调试配置的构建,将调试器附加到进程,并能够在MyObject中找到异常并修复它。
当您需要调试ClickOnce应用程序时,您需要确保在发布之前将构建配置设置为debug。问题解决了。
https://stackoverflow.com/questions/21434979
复制相似问题