Created
August 24, 2011 11:38
-
-
Save johnnykv/1167889 to your computer and use it in GitHub Desktop.
Korrekt manipulering af UI elementer fra en separat tråd.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Johnny Vestergaard - 2011 | |
//Et eksempel på _korrekt_ manipulering af et UI element | |
//fra en separat tråd. | |
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Data; | |
using System.Drawing; | |
using System.Linq; | |
using System.Text; | |
using System.Windows.Forms; | |
using System.Threading; | |
namespace ThreadsAndGui | |
{ | |
public partial class Form1 : Form | |
{ | |
public Form1() | |
{ | |
InitializeComponent(); | |
} | |
private void button1_Click(object sender, EventArgs e) | |
{ | |
//Start "startTraadMetod" i en ny tråd. | |
Thread lameThread = new Thread(startTraadMetode); | |
lameThread.Start(); | |
} | |
void startTraadMetode() | |
{ | |
SetLabelText("Ugh!"); | |
} | |
//Signatur til vores delegate, se evt mere om Delegates på LearnDevNow | |
delegate void SetTextCallback(string text); | |
//Denne metodes kaldes af vores nye tråd som blev oprettet i button1_Click | |
private void SetLabelText(string text) | |
{ | |
//Kontroller om tråden som har kaldt denne funktion er den samme tråd | |
//som vores label befinder sig i (altså UI tråden). | |
if (this.label1.InvokeRequired) | |
{ | |
//Delegate som peger på... denne metode... | |
SetTextCallback blah = new SetTextCallback(SetLabelText); | |
//Invoke bevirker at vi beder den tråd som ejer | |
//label1 om at eksekvere SetLabelText metoden for os. | |
label1.Invoke(blah, new object[] { text }); | |
} | |
else | |
{ | |
//Efter SetTextLabel metoden er kaldt vha. label1.Invoke | |
//ender vi her fordi det nu rent faktisk er UI tråden der kalder. (this.label1.InvokeRequired er false) | |
label1.Text = text; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment