Det er i visual basic express. og det vil den ikke den går kold
For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories("d:\billeder") mapper.Items.Add(foundDirectory) Next
For x = 0 To (mapper.Items.Count - 1) 'MsgBox(mapper.Items(x))
For Each foundFile As String In My.Computer.FileSystem.GetFiles(mapper.Items(x)) If foundFile.Substring(foundFile.Length - 3, 3) = "jpg" Then filer.Items.Add(foundFile) End If
If foundFile.Substring(foundFile.Length - 3, 3) = "JPG" Then filer.Items.Add(foundFile) End If Next
Nu ved jeg ikke hvad "går kold" betyder i denne sammenhæng.
Hvis du har huske at importere System.Threading så kan du kalde Thread.Sleep.
Men koden ligner grangiveligt noget GUI kode og så virker Thread.Sleep stadig, men den gør noget andet end du tror - hele GUI vil være frosset mens den kører og så vil den opdatere i et hug alligevel.
hmm ja det tror jeg også. Som man sikkert kan læse ud af koden så finder koden alle billed filer i en mappe og dennes under mapper. Derefter skulle den gerne smide det ind i pictureboxen. Det virker også fint hvis jeg har msgbox som stopper løkken men hvis jeg kører det uden den. Så sker der ikke noget. Jeg vil derfor gerne ligge et stop på 5-10 sek ind.
Public Class Form1 Private done As Boolean Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click done = False Dim t As Thread = New Thread(AddressOf TextUpdateThread) t.Start() End Sub Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click done = True End Sub Private Sub TextUpdateThread() Dim i As Integer = 0 While Not done i = i + 1 If TextBox1.InvokeRequired Then TextBox1.Invoke(New TextUpdateHandler(AddressOf TextUpdate), New Object() {i}) Else TextUpdate(i) End If Thread.Sleep(1000) End While End Sub Private Delegate Sub TextUpdateHandler(ByVal n As Integer) Private Sub TextUpdate(ByVal n As Integer) TextBox1.Text = n.ToString() End Sub End Class
(hvis den while løkke skal være helt korrekt skal der nok smides et par Thread.MemoryBarrier() ind, men du vil have en For Each løkke så ikke relevant for dig)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As Thread = New Thread(AddressOf lavstruktur) t.Start()
End Sub
Sub lavstruktur()
MsgBox("hej") For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories("d:\billeder") mapper.Items.Add(foundDirectory) Next
For x = 0 To (mapper.Items.Count - 1) 'MsgBox(mapper.Items(x))
For Each foundFile As String In My.Computer.FileSystem.GetFiles(mapper.Items(x)) If foundFile.Substring(foundFile.Length - 3, 3) = "jpg" Then filer.Items.Add(foundFile) End If
If foundFile.Substring(foundFile.Length - 3, 3) = "JPG" Then filer.Items.Add(foundFile) End If Next
Next For CD = 0 To filer.Items.Count - 1 Thread.Sleep(500) PictureBox1.Load(filer.Items(CD))
Hvis du tilføjer følgende, kan du i din løkke tilføje linien "Pause(5000)".
Private WithEvents myPauseTimer As New Timers.Timer Private Sub Pause(ByVal ms As Integer) myPauseTimer.Interval = ms myPauseTimer.Start() Do While myPauseTimer.Enabled = True My.Application.DoEvents() 'Sættes ind for at opdatere events Threading.Thread.Sleep(1) 'Sættes ind for at CPU-forbrug ikke er 100% Loop End Sub
Private Sub myPauseTimerHandler(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles myPauseTimer.Elapsed myPauseTimer.Stop() End Sub
Det fik jeg ikke meget ud af. Det ser dog ud til når jeg bruger den så virker det. nu ser det bare ud til at den ikke lukker ned for processen.
Når jeg kører følgende kode. Så selv om jeg lukker programmet ser det ud til at kører videre. Har ikke prøvet at køre det selvstændigt. Kun inde fra selve Visal Basic Express
Jeg troede det ville stoppe processen. Gør jeg noget forkert
Imports System Imports System.Threading
Public Class bill
Private WithEvents myPauseTimer As New Timers.Timer Private Sub Pause(ByVal ms As Integer) myPauseTimer.Interval = ms myPauseTimer.Start() Do While myPauseTimer.Enabled = True My.Application.DoEvents() 'Sættes ind for at opdatere events Threading.Thread.Sleep(1) 'Sættes ind for at CPU-forbrug ikke er 100% Loop End Sub
Private Sub myPauseTimerHandler(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles myPauseTimer.Elapsed myPauseTimer.Stop() End Sub
Private Sub bill_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load MsgBox("hej") For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories("c:\lasseprogram\billeder") mapper.Items.Add(foundDirectory) Next
For x = 0 To (mapper.Items.Count - 1) 'MsgBox(mapper.Items(x))
For Each foundFile As String In My.Computer.FileSystem.GetFiles(mapper.Items(x)) If foundFile.Substring(foundFile.Length - 3, 3) = "jpg" Then filer.Items.Add(foundFile) End If
If foundFile.Substring(foundFile.Length - 3, 3) = "JPG" Then filer.Items.Add(foundFile) End If Next
Next For CD = 0 To filer.Items.Count - 1 'Thread.Sleep(500) PictureBox1.Load(filer.Items(CD)) Pause(5000) Next
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click myPauseTimer.Stop() myPauseTimer.Enabled = False Me.Dispose() End Sub End Class
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.