Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

DotNET Csharp Frage zu ThreadPool mit Callback-delegate

Frage Entwicklung Visual Studio

Mitglied: MartinS

MartinS (Level 1) - Jetzt verbinden

23.01.2013, aktualisiert 17:19 Uhr, 1649 Aufrufe, 1 Kommentar

Ich habe jetzt schon viele Stellen im Netz über Threading gefunden, aber keine hat mir bisher weiter geholfen.
Entweder alle Images werden erst am Ende angezeigt oder es kommt zum Programmhänger.

Übrigens funktioniert der Code ohne Callback/delegate unter Win7 mit 2 Prozessoren, aber nicht unter XP.

Dieser Code stellt mit Icons den Fortschritt aus einer Bearbeitungsliste dar.
Die Bearbeitung wird mit btnApply eingeleitet. Am Ende der Bearbeitung wird der Text des Buttons geändert.

01.
		ManualResetEvent[] wait; 
02.
 
03.
		private void btnApply_Click(object sender, EventArgs e) 
04.
05.
			wait = new ManualResetEvent[1]; 
06.
			wait[0] = new ManualResetEvent(false); 
07.
			ThreadPool.QueueUserWorkItem(new WaitCallback(doApply), 0); 
08.
			WaitHandle.WaitAny(wait); 
09.
			btnApply.Text = "Done!"; 
10.
11.
 
12.
		private void doApply(object dummy) 
13.
14.
			for (int i = 0; i < 14; i++) 
15.
16.
				setPic(i, bmTODO); 
17.
18.
			// do something 
19.
			for (int i = 0; i < 14; i++) 
20.
21.
				setPic(i, bmWORK); 
22.
				// do something 
23.
				setPic(i, bmOK); 
24.
25.
26.
 
27.
		public void setPic(int i, Image img) 
28.
29.
			switch (i) 
30.
31.
				case 0: pictureBox1.Image = img; break; 
32.
				case 1: pictureBox2.Image = img; break; 
33.
				case 2: pictureBox3.Image = img; break; 
34.
				case 3: pictureBox4.Image = img; break; 
35.
				case 4: pictureBox5.Image = img; break; 
36.
				case 5: pictureBox6.Image = img; break; 
37.
				case 6: pictureBox7.Image = img; break; 
38.
				case 7: pictureBox8.Image = img; break; 
39.
				case 8: pictureBox9.Image = img; break; 
40.
				case 9: pictureBox10.Image = img; break; 
41.
				case 10: pictureBox11.Image = img; break; 
42.
				case 11: pictureBox12.Image = img; break; 
43.
				case 12: pictureBox13.Image = img; break; 
44.
				case 13: pictureBox14.Image = img; break; 
45.
				default: break; 
46.
47.
		}
Ich habe es auch mit einem Delegaten versucht:
01.
		public delegate void setPicDelegate(int i, Image img);
Das hat mich der Lösung aber nicht weiter gebracht.

Gibt es da eine einfache Lösung?
Oder muss ich jede einzelne PictureBox im doApply einzeln deligieren? - Was ich ja gerade vermeiden möchte!
Mitglied: MartinS
29.01.2013 um 12:17 Uhr
Das Problem habe ich jetzt gelöst.
Statt TreadPool/WaitCallback setze ich jetzt den Backgroundworker ein:

01.
BackgroundWorker worker; 
02.
 
03.
private void btnApply_Click(object sender, EventArgs e) 
04.
05.
    worker = new BackgroundWorker(); 
06.
    worker.WorkerSupportsCancellation = true; 
07.
 
08.
    worker.DoWork += new DoWorkEventHandler(doApply); 
09.
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(doApply_RunWorkerCompleted); 
10.
    worker.RunWorkerAsync(); 
11.
12.
 
13.
private void doApply(object dummy)  
14.
{  
15.
    for (int i = 0; i < 14; i++)  
16.
    {  
17.
        setPic(i, bmTODO);  
18.
    }  
19.
    // do something  
20.
    for (int i = 0; i < 14; i++)  
21.
    {  
22.
        setPic(i, bmWORK);  
23.
        // do something  
24.
        setPic(i, bmOK);  
25.
    }  
26.
    worker.CancelAsync(); 
27.
28.
 
29.
void doApply_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
30.
31.
    btnApply.Text = "Done!"; 
32.
33.
 
Bitte warten ..
Ähnliche Inhalte
HTML
JSONP Callback in HTML ausgeben
gelöst Frage von maddigHTML16 Kommentare

Guten Morgen, ich versuche zurzeit die Temperaturwerte eines AllNet3500 über die eingebaute JSONP Abfrage abzufragen und als einfache HTML ...

Visual Studio
DotNet UAC Passwort füllen
gelöst Frage von schicksalVisual Studio6 Kommentare

Hallo zusammen, ich tüftle gerade mit der UAC und C#. Ich starte ein Programm mit Process.start leider funktioniert das ...

Windows Tools
DotNet Installation schlägt fehl
gelöst Frage von emeriksWindows Tools1 Kommentar

Hi, Windows Server 2008 R2 SP1 Ich will/muss .Net auf min. 4.5 aktualisieren, weil eine Anwendung das erfordert. Egal, ...

Visual Studio
DotNet - Windows 2016 identifizieren
gelöst Frage von emeriksVisual Studio3 Kommentare

Hi, wie kann man - ohne WMI - und "elegant"/einfach mit DotNet ein Windows Server 2016 identifizieren? liefert sowohl ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 1 StundePerl1 Kommentar

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 2 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 108 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless11 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...