【问题标题】:How the Deployment.Current.Dispatcher.BeginInvoke work in windows store app?Deployment.Current.Dispatcher.BeginInvoke 如何在 Windows 商店应用程序中工作?
【发布时间】:2013-12-07 16:40:42
【问题描述】:

我有使用 windows phone 8 的经验并且我正在使用 WCF 数据服务,我可以使用以下代码成功更新我的记录:

public void UpdateJob1(EquipBooking equipBooking)
        {
            this._context.UpdateObject(equipBooking);
            this._context.BeginSaveChanges(OnChangesSaved, this._context);
        }

        private void OnChangesSaved(IAsyncResult result)
        {
            bool errorFound = false;
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                this._context = result.AsyncState as THA001_devEntities;

                try
                {
                    // Complete the save changes operation.
                    this._context.EndSaveChanges(result);
                }
                catch (DataServiceRequestException ex)
                {
                    errorFound = true;
                    MessageBox.Show("Error, While Updating Record");
                }

                if (!errorFound)
                {
                    MessageBox.Show("Record Successfully Updated");
                }
            }
            );

        }

但我在窗口商店应用程序中编写相同的代码时遇到问题,我无法更新记录,我在这里遇到问题:Deployment.Current.Dispatcher.BeginInvoke

谁能指导我,或重写我的代码?

谢谢

【问题讨论】:

    标签: c# windows-phone-7 windows-phone-8 microsoft-metro windows-store-apps


    【解决方案1】:

    您是否尝试过使用它来代替 Deployment.Current.Dispatcher.BeginInvoke

    CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
          {
    
          });
    

    编辑:

    整个方法是:

    private async void OnChangesSaved(IAsyncResult result)
    {
        bool errorFound = false;
        CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
        await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
          {
            this._context = result.AsyncState as THA001_devEntities;
            try
            {
                // Complete the save changes operation.
                this._context.EndSaveChanges(result);
            }
            catch (DataServiceRequestException ex)
            {
                errorFound = true;
                MessageBox.Show("Error, While Updating Record");
            }
    
            if (!errorFound)
            {
                MessageBox.Show("Record Successfully Updated");
            }
          });
    }
    

    【讨论】:

    • 我猜,我不知道,你能重写我的代码吗?请
    • @vb1 那里,方法改写了。
    • 我又添加了一个答案,如果和你的一样,我会标记你的答案是最终的
    • 我得到:System.InvalidOperationException:没有找到当前的 Window 对象来获取 CoreDispatcher。或者 CoreWindow.GetForCurrentThread() 只是 null。
    【解决方案2】:

    这是我重新写的,请批准语法

    public void ModfityJobs(EquipBooking equipBooking)
            {
                try
                {
                    this.IsDataLoaded = true;
                    _context.BeginSaveChanges(ModfityJobsAsynchCallBack, equipBooking);
                }
                catch (Exception ex)
                {
                }
            }
    
            private void ModfityJobsAsynchCallBack(IAsyncResult synchresult)
            {
                try
                {
                    dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
                        {
                            _context.EndSaveChanges(synchresult);
                        });
                }
                catch (Exception)
                {
    
                    throw;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多