J'ai un programme de formulaires Windows avec une forme MainForm. En appuyant sur un bouton, je lance un code qui s'exécute (impulsions) tous les 0,5secs sur un autre thread. Je veux modifier beaucoup de choses, comme les labels, les barres de progression sur mon MainForm, à partir de la méthode Pulse. Comment est-ce possible? Donc, je voudrais savoir, comment interagir avec les variables, les valeurs, dans ce thread, et le MainForm. Modifiez-vous les uns les autres, etc.Comment passer des valeurs entre threads?
Cliquez sur le bouton foo, je dis à mon pulsateur de commencer. Pulsator.Initialize();
Voici la classe Pulsator:
public static class Pulsator
{
private static Thread _worker;
public static void Initialize()
{
_worker = new Thread(Pulse);
_worker.IsBackground = true;
_worker.Start();
}
public static void Close()
{
if (_worker != null)
{
_worker.Abort();
while (_worker.IsAlive || _worker.ThreadState != ThreadState.Stopped)
{
//closing
}
}
}
public static void Pulse()
{
if (_worker != null)
{
while (true)
{
SomeOtherClass.Pulse();
Thread.Sleep(500);
}
}
else
{
SomeOtherClass.Pulse(); // yeah I know this doesnt needed
}
}
}
SomeOtherClass méthode d'impulsion ressemble à:
public static void Pulse()
{
//here I will have several values, variables, and I want to show results,
// values on my MainForm, like:
Random random = new Random();
MainForm.label1.Text = random.Next(123,321).ToString(); // I hope you know what I mean
}
Bien sûr, il est beaucoup plus compliqué, il est juste un exemple stupide.
Veuillez également noter que l'appel de Thread.Abort lève une exception ThreadAbortException que vous devrez prendre en compte dans votre méthode Close http://msdn.microsoft.com/en-us/library/system.threading.thread.abort. aspx – w69rdy