UWP从任务更新UI



我有一个应用程序,它正在检查网络范围(用于运行http服务)在本地网络

这意味着,我正在检查从10.0.0.1到10.0.0.255的f.e.。问题是,在PC上运行时,速度足够了,但在Lumia 950上运行时速度不够。所以我想在扫描期间更新UI。

问题如下:

  1. 在这一刻,我有几个任务f.e. 10 -每个任务都在扫描他的范围f.e.任务1 - 10.0.0.1到10.0.0.25等。-我应该使用10个任务还是有一些方法,如何。net将解决它自己?如果我使用50个任务,性能会如何?

  2. 第二个问题是,在扫描期间,我会找到PC, web服务正在工作,但是…找到电脑后,我该如何更新UI ?当所有的任务都完成后,我此刻只能做这件事。

我调用的方法是异步任务

  1. 你可以使用任意多的任务,系统会自动为你排队和执行。这是使用内置机制的优点之一

  2. 要在UI线程上执行代码,你可以像这样使用分派器:

    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
                //UI code here
    });
    

要在UI线程上执行代码,而您只想更新属性,您可以使用MVVM和ViewModel继承类

public abstract class NotifyPropertyChangedBase : INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;
   protected async void OnPropertyChanged([CallerMemberName] string propName = "")
   {
       await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.High,
           () =>
           {
               PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
           });
   }
}

所有的Xaml绑定属性使用单向或双向,并在属性使用OnPropertyChanged();如果我的代码出现异常,然后说Current is null

可以使用

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
{
     //write your code
     //in OnPropertyChanged use PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
});

如果您在用户控件或页面中编写代码,您可以看到以下代码。

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 
{
            //UI code here
});

CoreDispatcherPriority可以设置Priority,但你不应该将其设置为High,参见CoreDispatcherPriority

我还发现了另一种可能性如何更新UI -此时我正在更新进度条通过这种方式,但发现你可以传递其他变量。

 var progress = new Progress<int>(i => _progress = i);
 progress.ProgressChanged += Pr_ProgressChanged;

then event:

  private void Pr_ProgressChanged(object sender, int e)
    {
        progressBar1.Value = progressBar1.Value + 1;
    }

参数:

 public async Task GetWebServers(IProgress<int> progress) {
 //your code
}
调用:

await Task.WhenAll(workers.Select(webServer => webServer.GetWebServers(progress))
       );

相关内容

  • 没有找到相关文章

最新更新