wachten

Status
Niet open voor verdere reacties.

666joe666

Gebruiker
Lid geworden
23 nov 2005
Berichten
137
Is er een functie in C# dat je een deel code kan uitvoeren wanneer je programma aan het wachten is?

Alvast bedankt
 
Ik heb op mijn form ee backgroundworker toegevoegt uit de toolbox. enkel komt mijn programma niet in dit stuk code.

Wat kan de fout zijn?
 
in volgende code

Code:
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            foutcodempuinlezen();
            foutcodeaauxinlezen();
            foutcodeactrlinlezen();
        }
[\code]
 
Als je de backgroundWorker.RunWorkerAsync(); method aanroept, zal dit gedeelte worden gestart. Dit staat ook in de voorbeelden op de msdn website (link eerder)
 
Word de code dan pas uitgevoerd als het programma aan het wachten is?
 
Nee, deze begint zodra je de method aanroept. (zet maar eens een breakpoint in de method)


(of als je code hebt copy/paste uit de voorbeelden van de website... dan heb je de event handlers er niet aanhangen misschien?)
 
Heb gewoon de code zoals hierboven vermeld gebruikt met backgroundworker_dowork
 
altijd goed om nieuwe dingen eerst even in een apparte project te maken zodat je weet hoe het moet werken..

(je kunt ook eens eens breakpoints zetten om de kijken waarom je do_work niet start, krijg je een exception?)



voorbeeldje:

Code:
public partial class Form1 : Form
{
	private BackgroundWorker backgroundWorker1;

	public Form1()
	{
		InitializeComponent(); //place 2x button and 1x progressbar on form

		backgroundWorker1 = new BackgroundWorker();

		backgroundWorker1.WorkerReportsProgress = true;
		backgroundWorker1.WorkerSupportsCancellation = true;

		backgroundWorker1.DoWork += backgroundWorker1_DoWork;
		backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
		backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
	}

	private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
	{
		var worker = (BackgroundWorker)sender;

		//do work
		for (int i = 0; i < 100; i++)
		{
			if (worker.CancellationPending)
			{
				e.Cancel = true;
				break;
			}

			Thread.Sleep(100); //do not use in actual code
			worker.ReportProgress(i + 1);
		}
	}

	private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
	{
		progressBar1.Value = e.ProgressPercentage;
	}

	private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
	{
		string report = string.Format("Process {0}", e.Cancelled ? "Cancelled" : "Done");
		MessageBox.Show(report);
		button2.Enabled = false;
		button1.Enabled = true;
	}

	private void button1_Click(object sender, EventArgs e)
	{
		//start
		button1.Enabled = false;
		button2.Enabled = true;
		backgroundWorker1.RunWorkerAsync();
	}

	private void button2_Click(object sender, EventArgs e)
	{
		//cancel
		backgroundWorker1.CancelAsync();
	}
}
 
De backgroundworker start wel maar dit omdat ik deze aanroep via de backgroundwork1.runworkerasynq()
 
wat wil je dan precies, want dit is hoe het werkt. Het start pas wanneer je de RunWorkerAsync gebruikt
 
Ik wil dat men stuk code uitgevoerd wordt wanneer het programma niets doen. dus wanneer het aan het wachten is tot er op een knop geduwt wordt.
 
als je dit start in de constructor of zodra het form is geladen, kun je het stop zetten zodra de gebruiker op een knop drukt... (en eventueel weer starten zodra de gebruiker klaar is met dat wat er gebeurt als hij op de knop drukt)


Anders misschien even verduidelijken met je code.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan