2017-02-14 3 views
-4

Wie kann ich die Ausführung eines Algorithmus verzögern, um die Ergebnisse jeder Iteration im Algorithmus visuell anzuzeigen? Wenn ich versuche, die Höhe der Objekte im folgenden Code zu aktualisieren, wird nur das Endergebnis angezeigt. Wie kann ich anzeigen, was bei jedem Schritt passiert ist?Wie visualisiert man die Schritte eines Algorithmus?

namespace BubbleSortRappresentazione_grafica 
{  
    public partial class MainWindow : Window 
    { 
     int[] v; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      Random rnd = new Random(); 

      v = new int[10]; 
      for (int j = 0; j < 10; j++) 
      { 
       v[j] = rnd.Next(0, 100); 
      } 
      _0.Height = v[0] + 20; 
      _1.Height = v[1] + 20; 
      _2.Height = v[2] + 20; 
      _3.Height = v[3] + 20; 
      _4.Height = v[4] + 20; 
      _5.Height = v[5] + 20; 
      _6.Height = v[6] + 20; 
      _7.Height = v[7] + 20; 
      _8.Height = v[8] + 20; 
      _9.Height = v[9] + 20; 
     }  

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      // algoritmo ordinamento  

      for (int i = 0; i < 10; i++) 
      { 
       for (int j = 0; j < 10; j++) 
       {      
        if (v[j] > v[i]) 
        { 
         int tmp = v[j]; 
         v[j] = v[i]; 
         v[i] = tmp; 

         _0.Height = v[0] + 20; 
         _0.Content = v[0]; 
         _1.Height = v[1] + 20; 
         _1.Content = v[1] ; 
         _2.Height = v[2] + 20; 
         _2.Content = v[2]; 
         _3.Height = v[3] + 20; 
         _3.Content = v[3] ; 
         _4.Height = v[4] + 20; 
         _4.Content = v[4]; 
         _5.Height = v[5] + 20; 
         _5.Content = v[5]; 
         _6.Height = v[6] + 20; 
         _6.Content = v[6]; 
         _7.Height = v[7] + 20; 
         _7.Content = v[7]; 
         _8.Height = v[8] + 20; 
         _8.Content = v[8]; 
         _9.Height = v[9] + 20; 
         _9.Content = v[9]; 

         Thread.Sleep(100); 
        } 
       } 
      } 
     } 
    } 
} 
+0

Sie möchten also die Komponenten Inhalt und Höhe "in Echtzeit" ändern? –

+0

Änderungen werden nur dann auf der grafischen Oberfläche ausgeführt, wenn die Methode ausgeführt wurde, nicht während, da diese Aufrufe den UI-Thread blockieren. Verwenden Sie einen 'BackgroundWorker', um die Änderungen in Echtzeit zu sehen. – Kilazur

+0

Wenn ich die Schleife mache, zum Beispiel möchte ich die Größe der Schaltflächen in ändern, ändert sie die Größe aber grafisch nicht, es zeigt die Änderungen am Ende der Schleife und nicht während es, also würde ich gerne finden etwas, das die Änderungen Grafiken während des Zyklus machen –

Antwort

0

Ich glaube, dass Sie, was wirklich suchen Application.DoEvents Methode ist:

for (int i = 0; i < 10; i++) 
{ 
    for (int j = 0; j < 10; j++) 
    {      
     if (v[j] > v[i]) 
     { 
      //... 
      Thread.Sleep(100); 
      Application.DoEvents(); 
     } 
    } 
} 

Dies wird, dass unabhängig von optischen Veränderungen führen Sie innerhalb der Schleife zu machen wird in jeder Iteration angewendet werden. Sie können auch in Betracht ziehen, die .Sleep() zu entfernen, da ich nicht sicher bin, wie nützlich es für Sie ist.

Verwandte Themen