Avatar billede dollas Nybegynder
25. august 2004 - 17:20 Der er 13 kommentarer og
1 løsning

multifunktioner i forms

Jeg har et problem. Eller spørgsmål.

f.eks har jeg en form hvor der er en progressbar og nogle filer der køre i en løkke indtil at alle filer er blever flyttet fra a til b.

Hvordan laver jeg så det er muligt at fortsætte i formen, f.eks iform af en annuller knap.
?


Er det til at forst¨å?
Avatar billede arne_v Ekspert
25. august 2004 - 17:21 #1
Du skal have kopieringen over i en seperat tråd !
Avatar billede dollas Nybegynder
25. august 2004 - 17:24 #2
ja, det er det med tråde, jeg har læst lidt på, men???

Noget du kan hjælpe med ?

Iøvrigt. Hvis nu min app skal have adgang til et \\ share, og der IKKE er direkte adgang, kan man så vedhæfte brugernavn og password til den adgang uden brug af WMI ?
Avatar billede arne_v Ekspert
25. august 2004 - 17:32 #3
Jeg kan muligvis godt lave et eksempel.
Avatar billede dollas Nybegynder
25. august 2004 - 17:32 #4
Ja, mange gange 1000 tak :)
Avatar billede arne_v Ekspert
25. august 2004 - 22:02 #5
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Threading

Public Class MainForm
Inherits Form
    Private bar As ProgressBar
    Private start As Button
    Private abort As Button
    Private t As Thread

    Public Sub New()
        bar = New ProgressBar
        start = New Button
        abort = New Button
        SuspendLayout
        bar.Location = New Point (50, 50)
        bar.Size = New Size (200, 50)
        bar.Name = "Progress Bar"
        bar.Minimum = 0
        bar.Maximum = 60
        bar.Value = 0
        bar.Step = 1
        start.Location = New Point (50, 150)
        start.Size = New Size (200, 50)
        start.Name = "Start Button"
        start.Text = "Start"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point (50, 250)
        abort.Size = New Size (200, 50)
        abort.Name = "Abort Button"
        abort.Text = "Abort"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size (300, 350)
        Controls.Add(bar)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(False)
    End Sub

    Sub Copy()
        Dim i As Integer = 0
        While i < 60
            bar.Value = i
            Thread.Sleep(1000)
            i = i + 1
        End While
    End Sub

    Sub StartClick(ByVal sender As Object, ByVal e As EventArgs)
        t = New Thread (AddressOf Copy)
        t.Start
    End Sub

    Sub AbortClick(ByVal sender As Object, ByVal e As EventArgs)
        t.Abort
    End Sub

    <STAThread()> _
    Public Shared Sub Main(ByVal args As String())
        Application.Run(New MainForm )
        Application.Exit
        Environment.Exit(0)
    End Sub
End Class
Avatar billede arne_v Ekspert
25. august 2004 - 22:02 #6
Ja - Copy laver ikke en copy, men det regner jeg med at du kan ligge ind.
Avatar billede dollas Nybegynder
26. august 2004 - 15:22 #7
arne :)

Hvis jeg nu i min copy åbner filer, og det gør man jo. Når jeg så slår tråden ned med abort, så er filen jo åben. ???

Hvordan sikre jeg mig at den bliver lukket så jeg skal slette den fil efter min abort ??
Avatar billede arne_v Ekspert
26. august 2004 - 15:35 #8
Operativ systemet skal nok få lukket den fil når dit program afslutter.

Den halvfærdige output filer naturligvis ubrugelig og kan slettes.

Hvis du vil håndtere det smukt så:


      Try
        ' kopierings kode
      Catch e As ThreadAbortException
        ' cleanup kode
      End Try
Avatar billede dollas Nybegynder
26. august 2004 - 16:01 #9
ok...

se her:

  For Each item In strFiles
            Try
                ' kopierings kode
         
            Dim fnm1 = item
            Dim fnm2 = share & "\" & Form1.filename(item)

            Dim cr As String = Convert.ToChar(13)
            Dim size As Integer = (New FileInfo(fnm1)).Length
            Dim f1 As Stream = New FileStream(fnm1, FileMode.Open, FileAccess.Read)
            Dim f2 As Stream = New FileStream(fnm2, FileMode.Create, FileAccess.Write)
            Dim b(10000) As Byte
            Dim n As Long = 0
            Dim actual As Integer
            Dim more As Boolean = True

            ProgressBar1.Minimum = 0
            ProgressBar1.Maximum = size
            ProgressBar1.Value = 0
            ProgressBar1.Step = 10000
            While (more)
                actual = f1.Read(b, 0, b.Length)
                If actual > 0 Then
                    f2.Write(b, 0, actual)
                    n = n + actual
                    '    Console.Write(cr & n & " af " & size)
                    Label1.Text = cr & n & " af " & size
                    Label1.Update()
                    ProgressBar1.PerformStep()
                Else
                    more = False
                End If

            End While

            f1.Close()
                f2.Close()
            Catch e As ThreadAbortException
             
            End Try
        Next



jeg kan ikke smide en f1.close eller f2.close ind i:
Catch e As ThreadAbortException
             
            End Try


Hvordan sikre jeg mig at den lukker de filer ?
Avatar billede arne_v Ekspert
26. august 2004 - 16:04 #10
Hvis du putter erklæringen af f1 og f2 ovenfor Try så kan du bruge dem nede i Catch.
Avatar billede dollas Nybegynder
26. august 2004 - 16:06 #11
Ja, selvføgelig...

Hold da kæft...
point
Avatar billede dollas Nybegynder
26. august 2004 - 16:06 #12
ahh, ja, iøvrigt... Det der med drag / drop kunne du ikke hjælpe med ? eller ?
Avatar billede arne_v Ekspert
26. august 2004 - 16:09 #13
Drop and drag er ikke mig. Alle har deres begrænsninger.

Hvis jeg skal kaste mig over noget så bliver det FTP koden.
Avatar billede dollas Nybegynder
26. august 2004 - 16:10 #14
Ja tak... Det ville være dejligt...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester