Keresés

Új hozzászólás Aktív témák

  • wollnerd

    aktív tag

    Sziasztok!
    Van egy kérdésem, amire magyarázatot szeretnék kapni hogy miért van ez. :F
    Dolgozok egy idáig már 3 winform-os project-en. Amikor a 3. form-on kezdtem el dolgozni, átmenetileg átírtam a Program.cs-ben az Application.Run sorban arra a 3. form-ra hogy rögtön azt lássam.
    Ma pedig végletesnek tituláltam a 3. form-ot és leprogramoztam az adatátvitel egy részét a 3. form-ra. Majd visszaírom a Program.cs-ben arra a fő ablakra. (Nos, valójában a főablak az induláskor elrejtve magát, mert behoz egy kisebb ablakot és azt leokézva felfedi magát a főablak a kisablakban megadott adatok átvitelével a főablakba.)
    És azt láttam hogy egyszerűen nem akart elindulni a főform! (BlackjackWF) hajamat téptem, hiába tettem breakpoint-okat, de aztán meglepve rájöttem hogy... (kép alább)

    És nem értem miért... Új típusú WinForm változó más névvel a welcomeform (a kisablak) alatt és mégis ez a 3. form megakadályozza főablak megjelenését!
    Nem értem hogy miért és milyen programnyelvi utasítási szabályok alapján történik az, amit még a Debugger se mond el, sok-sok breakpointtal sem?! :F :F :F
    Mindenesetre megnyugodtam, hiszen, ha nincs az a sor, szépen elindul a főablak, de ha aktív e sor, itt, akkor kapufa...

    Lehet hogy azt a sort jobb abba a button click event blokkjába helyezni, ahol megnyilna a 3. form...

  • wollnerd

    aktív tag

    Sziasztok!
    Nem értem a backgroundworkert és a folyamatjelző működését! Pontosabban nem értem hogy miért van az hogy ha a projektemben nulláról próbálom megalkotni a BW-t, azt a hibát dobja mindig: Ez a BackgroundWorker folyamat azt állítja, hogy nem jelenti az előrehaladást. Módosítsa a WorkerReportsProgress tulajdonságot, hogy jelentse az előrehaladást.
    Miközben kódról-kódra pontosan próbálom másolni 100 tutoriából, mindig ez a hiba, de ha egy letöltött projektet indítok el, ott tökéletesen müködik pedig a kódom szinte ugyanaz és nálam mégsem működik! :( Valaki megmagyarázná hogy miért van? Biztos h én vok a hülye.... Köszi előre is. (Scripteket próbálok a BW-el lefuttatni és a folyamatcsik jelezné hol tart jelenleg a folyamat.)
    A projektem kódja: (Elnézést a hosszú tartalmáért. Használom a forráskód gombot, remélem bevállik.)
    private void BnWebElemStart_Click(object sender, EventArgs e)
            {
                if (!hatterbenDolgozo.IsBusy)
                {
                    hatterbenDolgozo.RunWorkerAsync();
                    Richtbstatus.SelectionColor = Color.Blue;
                    Richtbstatus.SelectedText = "A Wappalyzer scripje 5 másodpercentként küldi a visszajelzését. A Sitespeedo 10 másodpercenként. A többi tool x mp-ként.";
                    Richtbstatus.SelectedText = Environment.NewLine + "A Sitespeedo elemzése tart a legtovább...";
                    Richtbstatus.SelectionColor = Color.Black;
                }
            }
            private void Richtbstatus_TextChanged(object sender, EventArgs e)
            {
                Richtbstatus.SelectionStart = Richtbstatus.Text.Length;
                Richtbstatus.ScrollToCaret(); //'Autogörgetés az aljára' mendódus mint a telepítővarázslóknál.
            }
            private void hatterbenDolgozo_DoWork(object sender, DoWorkEventArgs e)
            {
                for (int i = 0; i <= 100; i++)
                {
                    //CHECK FOR CANCELLATION FIRST
                    if (hatterbenDolgozo.CancellationPending)
                    {
                        //CANCEL
                        e.Cancel = true;
                    }
                    else
                    {
                        Thread.Sleep(1000);
                        hatterbenDolgozo.ReportProgress(i);
                    }
                }
            }
            private void hatterbenDolgozo_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                progressBar.Value = e.ProgressPercentage;
                lbfolyamat.Text = e.ProgressPercentage.ToString() + "%";
             }
            private void hatterbenDolgozo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (e.Cancelled)
                {
                    lbfolyamat.Text = "folyamat megszakítva.";
                    progressBar.Value = 0;
                }
                else
                    lbfolyamat.Text = "folyamat befejeződött.";
            }
    A letöltött projekt:
    private void cancelBtn_Click(object sender, EventArgs e)
    {
    //REQUEST CANCELLATION
    backgroundWorker1.CancelAsync();
    }

    //RUN BG STUFF HERE.NO GUI HERE PLEASE
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    for (int i = 0; i <= 100; i++)
    {
    //CHECK FOR CANCELLATION FIRST
    if (backgroundWorker1.CancellationPending)
    {
    //CANCEL
    e.Cancel = true;
    }
    else
    {
    simulateHeavyJob();
    backgroundWorker1.ReportProgress(i);
    }
    }

    }

    //THIS UPDATES GUI.OUR PROGRESSBAR
    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    progressBar1.Value = e.ProgressPercentage;
    percentageLabel.Text = e.ProgressPercentage.ToString() + " %";
    }

    //WHEN JOB IS DONE THIS IS CALLED.
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    if (e.Cancelled)
    {
    display("You have Cancelled");
    progressBar1.Value = 0;
    percentageLabel.Text = "0";
    }
    else
    {
    display("Work completed successfully");
    }
    }
    //SIMULATE HEAVY JOB
    private void simulateHeavyJob()
    {
    //SUSPEND THREAD FOR 100 MS
    Thread.Sleep(100);
    }

Új hozzászólás Aktív témák