【问题标题】:Starting server side operation from GUI and updating GUI once operation is done从 GUI 启动服务器端操作并在操作完成后更新 GUI
【发布时间】: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 的请求?

【问题讨论】:

    标签: c# web-services wcf asynchronous soap


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2015-07-07
      • 2014-02-07
      相关资源
      最近更新 更多