当前位置: 代码迷 >> VB Dotnet >> 求帮助,目测是线程有关问题。
  详细解决方案

求帮助,目测是线程有关问题。

热度:111   发布时间:2016-04-25 02:08:47.0
求帮助,目测是线程问题。。。
大家应该都知道选择排序吧?
我现在想写一个程序,从零开始每一次选择出最小的下标,然后实现交换动画(用Button控件来代表数字,每一个数字都”关联“一个Button控件。)
我用的timer来实现控时移动。。。。
现在问题是如果只用timer的tick的话,就是最后一趟遍历的交换,前面的交换都没有。。。
我想要第一躺(从零开始)遍历之后,就实现交换动画,交换动画实现后,再进行第二趟遍历。。。。如何做啊?
我线程完全写不出来。。。。

------解决思路----------------------
timer?每次tick发生什么啊?
在正常的循环里加上sleep停顿下就行了吧?
------解决思路----------------------
[code=vb]Public Class Form1

    Private a() As Integer
    Private i As Integer

    Public Sub Animate(ByVal i1 As Integer, ByVal i2 As Integer)
        '显示动画,a(i1) 和 a(i2) 交换'
    End Sub

    '开始'
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        a = New Integer() {5, 6, 7, 0, 1, 2, 3, 4, 11, 12, 8, 9, 10}
        i = -1
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        i = i + 1
        If i < a.Count Then
            Dim vMin As Integer = a(i)
            Dim jMin As Integer = i
            For j As Integer = i + 1 To a.Count - 1
                If a(j) < vMin Then
                    vMin = a(j)
                    jMin = j
                End If
            Next
            If jMin <> i Then
                a(jMin) = a(i)
                a(i) = vMin
            End If
            Animate(i, jMin)
        Else
            Timer1.Enabled = False
        End If
    End Sub
End Class[code]
------解决思路----------------------
这个问题,我觉得可以这样。你让排序的时间加长。然后其他线程刷新显示。这个涉及变量互用的问题。可能不好写。
  相关解决方案