从 GUI 启动服务器端操作并在操作完成后更新 GUI

Posted

技术标签:

【中文标题】从 GUI 启动服务器端操作并在操作完成后更新 GUI【英文标题】:Starting server side operation from GUI and updating GUI once operation is done 【发布时间】:2018-09-28 16:29:19 【问题描述】:

我有一个 WCF 服务接口:

[OperationContract]
void BeginDelete(MyParams params);

,看起来像:

private CancellationTokenSource _cancelSource;
...
public void BeginDelete(MyParams params)

    ....
    _cancelSource = new CancellationTokenSource();
    var cancelToken = _cancelSource.Token;
    var task = System.Threading.Tasks.Task.Factory.StartNew(() =>
    
        try
        
            bool done = false;
            while (!done)
            
                cancelToken.ThrowIfCancellationRequested();

                // Deleting stuff from database...
                // Carry on deleting until there is no more to delete
                // or user cancels midway.
            

            // Operation is now complete so update GUI (e.g. callback).
        
        catch
        
            throw;
        
    , cancelToken);

    task.ContinueWith(t =>
    
        Console.WriteLine("Faulted...");
    , System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);

    task.ContinueWith(t =>
    
        Console.WriteLine("Canceled...");
    , System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled);
   

我正在使用 SOAP 从我的 Web GUI 调用此服务(例如,带有“删除”按钮的 jQuery 对话框)。

当操作正在进行时,我会显示一个带有进度条的对话框,但这是我的问题...

对话框保持打开状态,因为它不知道操作已完成。

如何从服务器端传达更新 GUI 的请求?

【问题讨论】:

【参考方案1】:

在你的另一个 ContinueWiths 之后是这样的:

task.ContinueWith(t =>
    
        dialog.Close()
    );

【讨论】:

以上是关于从 GUI 启动服务器端操作并在操作完成后更新 GUI的主要内容,如果未能解决你的问题,请参考以下文章

Swing GUI 不更新

仅启动一次后台服务,并在任务完成后停止

从按钮操作中调用变量并在出现错误时显示错误消息

oracle安装完成后的常用操作及数据库还原

会话无法在 chrome 中工作并在 Firefox 中工作

Angular 2 - 如何在等待 http 请求完成时阻止 GUI 渲染