Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 1611 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 ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Windows Server
Fehlermeldung "DotNet Memory Management Global " (5)

Frage von xXEddiXx zum Thema Windows Server ...

LAN, WAN, Wireless
gelöst HP Switches - Frage zu Spanning Tree bzw. Loop Back Protection (12)

Frage von chfran zum Thema LAN, WAN, Wireless ...

Hyper-V
Grundsatz Frage Anbindung Hyper V Hosts ans Netzwerk (7)

Frage von Eifeladmin zum Thema Hyper-V ...

Windows Netzwerk
gelöst Frage zu den Netzwerkfreigaben mit Bild (8)

Frage von M.Marz zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...