C# 如何可视化算法的步骤
如何延迟算法的执行以直观地显示算法中每次迭代的结果?当我尝试更新下面代码中对象的高度时,它只显示最终结果。如何显示每一步发生的情况C# 如何可视化算法的步骤,c#,wpf,graphics,C#,Wpf,Graphics,如何延迟算法的执行以直观地显示算法中每次迭代的结果?当我尝试更新下面代码中对象的高度时,它只显示最终结果。如何显示每一步发生的情况 namespace BubbleSortRappresentazione_grafica { public partial class MainWindow : Window { int[] v; public MainWindow() { InitializeCom
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);
}
}
}
}
}
}
namespace bubblesortrappresentationone_grafica
{
公共部分类主窗口:窗口
{
int[]v;
公共主窗口()
{
初始化组件();
随机rnd=新随机();
v=新整数[10];
对于(int j=0;j<10;j++)
{
v[j]=rnd.Next(01100);
}
_0.高度=v[0]+20;
_1.高度=v[1]+20;
_2.高度=v[2]+20;
_3.高度=v[3]+20;
_4.高度=v[4]+20;
_5.高度=v[5]+20;
_6.高度=v[6]+20;
_7.高度=v[7]+20;
_8.高度=v[8]+20;
_9.高度=v[9]+20;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
//序数算法
对于(int i=0;i<10;i++)
{
对于(int j=0;j<10;j++)
{
如果(v[j]>v[i])
{
int tmp=v[j];
v[j]=v[i];
v[i]=tmp;
_0.高度=v[0]+20;
_0.内容=v[0];
_1.高度=v[1]+20;
_1.内容=v[1];
_2.高度=v[2]+20;
_2.内容=v[2];
_3.高度=v[3]+20;
_3.内容=v[3];
_4.高度=v[4]+20;
_4.内容=v[4];
_5.高度=v[5]+20;
_5.内容=v[5];
_6.高度=v[6]+20;
_6.内容=v[6];
_7.高度=v[7]+20;
_7.内容=v[7];
_8.高度=v[8]+20;
_8.内容=v[8];
_9.高度=v[9]+20;
_9.内容=v[9];
睡眠(100);
}
}
}
}
}
}
我相信您真正想要的是方法:
for(int i=0;i<10;i++)
{
对于(int j=0;j<10;j++)
{
如果(v[j]>v[i])
{
//...
睡眠(100);
Application.DoEvents();
}
}
}
这将导致您在循环中所做的任何可视更改都将应用于每个迭代中。你也可以考虑删除<代码>睡眠()/代码>,因为我不确定它对你有多有用。你想查看组件“实时更新”的内容和高度吗?当方法完成时,修改只被改写到图形界面,因为这些调用阻止了UI线程。使用
BackgroundWorker
实时查看更改。当我执行循环时,例如,我想更改for中按钮的大小,它会更改大小,但不会以图形方式更改,它会在循环结束时显示更改,而不是在循环期间显示更改,因此,我想找到一些东西,使变化的图形,在我想看到的变化,在实时我不明白大家怎么认为这是不清楚什么是问,但如果它是重新开放,我会张贴一个完整的海报工作的例子。
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (v[j] > v[i])
{
//...
Thread.Sleep(100);
Application.DoEvents();
}
}
}