Background worker console.writeline

Status
Niet open voor verdere reacties.

SherinBloemendaal

Gebruiker
Lid geworden
5 jan 2013
Berichten
259
Hallo,

Ik heb een "Console" als form gemaakt.
Ik kan dus een lijn aan die console toevoegen door : Form2.write(String, color)

Ik maak een programma dat andere programma's installeerd. 7zip en np++ enz.
Dat verloopt allemaal goed.
maar ik wil graag als hij klaar is met 7zip installatie dat hij dus een lijn aan de console toevoegt.

Helaas ging dit niet zo makkelijk als ik dacht.

Dit is wat ik nu heb :

Code:
Private Sub InstallingApps_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles InstallingApps.DoWork
        'Instalatie van Applications
        Form2.Write("10% Installing Applications", Color.White)
        ProgressBar4.Value = 10
        Process.Start(RoamingData + "\7zip.exe", "/S").WaitForExit()
        Form2.Write("20% Installing Applications", Color.White)
        ProgressBar4.Value = 20
        Process.Start(RoamingData + "\googlechrome.msi", "/q").WaitForExit()
        Form2.Write("25% Installing Applications", Color.White)
        ProgressBar4.Value = 25
        Process.Start(RoamingData + "\java.exe", "/s").WaitForExit()
        Form2.Write("30% Installing Applications", Color.White)
        ProgressBar4.Value = 30
        Process.Start(RoamingData + "\N++.exe", "/S").WaitForExit()
        Form2.Write("40% Installing Applications", Color.White)
        ProgressBar4.Value = 40
        Process.Start(RoamingData + "\CIRDP.exe").WaitForExit()
        Form2.Write("60% Installing Applications", Color.White)
        ProgressBar4.Value = 60
        SendKeys.Send(Keys.Enter)
        Process.Start(RoamingData + "\esetmsipackage.exe").WaitForExit()
        Form2.Write("Starting ESET Instalation...", Color.White)
        Process.Start(RoamingData + "\ees_nt32_enu\ees_nt32_enu.msi", "/q").WaitForExit()
        Form2.Write("75% Installing Applications", Color.White)
        Form2.Write("Activating ESET Endpoint Security...", Color.White)
        Form2.Write("Killing ESET Endpoint Security Service...", Color.DarkRed)
        EsetProcessKiller.Start()
        Try
            System.IO.Directory.Delete(esetpath, True)
        Catch ex As Exception
            Form2.Write("Error deleting eset folder. can't activate it now. Error : " + ex.Message, Color.Red)
        End Try
        ProgressBar4.Value = 75
        Process.Start(RoamingData + "\esetfolder.exe").WaitForExit()
        EsetProcessKiller.Stop()
        Form2.Write("ESET Endpoint Security succesfully activated.", Color.Green)
        Form2.Write("80% Installing Applications", Color.White)
        ProgressBar4.Value = 80
        Process.Start(RoamingData + "\office10.exe").WaitForExit()
        Process.Start(RoamingData + "\proplusx86\setup.exe", "/q").WaitForExit()
        Form2.Write("100% Installing Applications", Color.White)
        ProgressBar4.Value = 100
    End Sub

Wat moet ik nu verder?


Alvast bedankt!
Sherin Bloemendaal
 
Laatst bewerkt:
Ben achter iets heel geks gekomen. Ik heb doormiddel van breakpoints en steps de bug gevonden. maar hoe ik dit moet oplossen weet ik echt niet.
Hij ontvangt de String prima. ook als ik heb in een msgbox doe wordt hij keurig weergegeven. maar als ik Form2.WriteNewLine(msg, color.white) doe komt hij er gewoon niet in te staan.
ik gebruik een richtextbox. ik heb ook al met een gewone textbox geprobeerd maar hij doet niks. HOE KAN DIT???? ik snap het niet meer. zelfs de raarste dingen werken, dus gewoon posten wat je denk!!

Alvast Bedankt!
Sherin Bloemendaal
 
probeer eens te werken met de events die met de background worker mee komen, zoals progress changed die voor dit soort dingen is gemaakt (progressbar/statusmessage)


Ik hoop dat je wat aan dit voorbeeldje hebt voor de werking, het is in C# de converter die ik soms gebruik om het in VB.net om te zetten heeft kuren :P

Code:
private void StartInstalling()
{
    var worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.ProgressChanged += Worker_ProgressChanged;
    worker.DoWork += Worker_DoWork;
    worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
    worker.RunWorkerAsync();
}

Code:
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
    var worker = sender as BackgroundWorker;

    var roamingData = "C:";


    worker.ReportProgress(0, "installing 7zip");
    Process.Start(Path.Combine(roamingData, "7zip.exe"), "/s")?.WaitForExit();

    worker.ReportProgress(10, "installing chrome");
    Process.Start(Path.Combine(roamingData, "googlechrome.msi"), "/q")?.WaitForExit();


    worker.ReportProgress(20, "installing java");
    Process.Start(Path.Combine(roamingData, "java.exe"), "/s")?.WaitForExit();

    //etc

    worker.ReportProgress(100, "done");
}

Code:
private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    //set progress / statusmessage
    //ProgressBar4.Value = e.ProgressPercentage;
    //Form2.Write(e.UserState.ToString(), Color.White)

    Debug.WriteLine(e.ProgressPercentage);
    Debug.WriteLine(e.UserState.ToString());
}

Code:
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    Debug.WriteLine("work completed");
}
 
Hallo!


Super bedankt voor de reactie!
Ik ga het nu met de telerik converter proberen.
Anders doe ik het zelf wel :) ik snap c# ook wel :)

Het ziet er goed uit dus heb goede hoop!


UPDATE :
Bij het 2e stukje code geeft hij een error :
CONVERSION ERROR: Code could not be converted. Details:

-- line 1 col 9: invalid TypeDecl

Please check for any errors in the original code and try again.

UPDATE 2 : Heb de code zelf geconverteerd :)
 
Laatst bewerkt:
Ja, ik had de telerik coverter geprobeerd, maar als je het bekijkt is het vrij eenvoudig in vb te schrijven denk ik zo. (als het niet lukt hoor ik het wel, dan doe ik het wel)


UPDATE: :thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan