UI actualización UI de la tarea

Tengo una aplicación que verifica los rangos de red (para ejecutar el servicio http) en la red local.

Entonces, significa que estoy verificando fe de 10.0.0.1 a 10.0.0.255. Y este es el problema, cuando se ejecuta en PC, la velocidad es suficiente, pero cuando se ejecuta en el Lumia 950, la velocidad no es suficiente. Entonces me gustaría actualizar la UI durante el escaneo.

Así que aquí están las preguntas:

  1. En este momento tengo varias tareas fe 10 – cada tarea está escaneando su rango fe task 1 – 10.0.0.1 a 10.0.0.25 etc. – ¿Debería usar 10 tareas o hay alguna manera, cómo lo resolverá el .net? ? ¿Cuál será el rendimiento, si usaré 50 tareas?

  2. La segunda pregunta es, durante el escaneo, encontraré la PC, donde está funcionando el servicio web, pero … ¿Cómo debería actualizar la interfaz de usuario cuando se encuentra la PC? En este momento, solo puedo hacerlo, cuando todas las tareas hayan terminado.

Los métodos que estoy llamando son tareas asíncronas

  1. Puede usar tantas tareas como desee, el sistema automáticamente realizará colas y ejecuciones por usted. Esa es una de las ventajas de utilizar los mecanismos integrados

  2. Para ejecutar el código en el hilo de UI, puede usar el despachador de esta manera:

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

Para ejecutar código en el subproceso de UI y solo desea actualizar la propiedad. Puede usar MVVM y la herencia de ViewModel de la clase

 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)); }); } } 

Y todas las propiedades que el enlace Xaml utiliza de una o dos direcciones y en el uso de propiedad OnPropertyChanged (); Y si el momento en que mi código expira y dice que Current is null

Puedes usar

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

Si escribió el código en control de usuario o una página puede ver el código siguiente.

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

El CoreDispatcherPriority puede establecer la Prioridad, pero no debe establecerlo en Alto, vea CoreDispatcherPriority

También encontré otra posibilidad de cómo actualizar la interfaz de usuario: en este momento estoy actualizando la barra de progreso de esta manera, pero descubrí que puedes pasar otras variables.

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

entonces evento:

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

Método con parametrs:

  public async Task GetWebServers(IProgress progress) { //your code } 

Vocación:

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