2017-02-14 2 views
-4

Как я могу отложить выполнение алгоритма для визуального отображения результатов каждой итерации в алгоритме? Когда я пытаюсь обновить высоту объектов в приведенном ниже коде, он отображает только конечный результат. Как я могу показать, что произошло на каждом шагу?Как визуализировать шаги алгоритма

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

Итак, вы хотите просмотреть компоненты, изменяющие контент и высоту «в реальном времени»? –

+0

Модификации только повторены для графического интерфейса, когда этот метод выполнен, а не во время, так как эти вызовы блокируют поток пользовательского интерфейса. Используйте «BackgroundWorker», чтобы увидеть изменения в реальном времени. – Kilazur

+0

, когда я делаю цикл, например, я хочу изменить размер кнопок в, он меняет размер, но графически нет, он показывает изменения в конце цикла, а не во время его, поэтому я хотел бы найти то, что делает изменения графики во время цикла –

ответ

0

Я считаю, что то, что вы действительно ищете это Application.DoEvents метод:

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

Это приведет к тому, что какой бы то ни визуальных изменений вы делаете внутри цикла будут применяться в каждой итерации. Вы также можете рассмотреть возможность удаления .Sleep(), так как я не уверен, насколько он полезен для вас.

Смежные вопросы