Beschreibung:
Beispiel-Anwendung im CompactFramework, die mit Threads arbeitet, um dem Benutzer anzuzeigen, dass ein Prozess in Bearbeitung ist, bzw. dass die Anwendung im Moment keine Eingaben entgegen nimmt:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartDeviceProject1
{
public partial class Form1 : Form
{
private bool Working = true;
private delegate void MethodInvoker();
public Form1()
{
InitializeComponent();
}
private void ProgressBarWorking()
{
try
{
while (Working)
{
for (int i = 0; i < 100; i++)
{
Invoke((MethodInvoker)delegate()
{
progressBar1.Value = i;
});
Thread.Sleep(50);
}
}
}
catch { }
}
private void Label1Working()
{
try
{
while (Working)
{
Invoke((MethodInvoker)delegate()
{
switch (label1.Text)
{
case "/":
label1.Text = "\\";
break;
case "\\":
label1.Text = "/";
break;
}
});
Thread.Sleep(100);
}
}
catch { }
}
private void Label2Working()
{
try
{
while (Working)
{
Invoke((MethodInvoker)delegate()
{
if (label2.BackColor == Color.Red)
label2.BackColor = Color.Gray;
else
if (label2.BackColor == Color.Gray)
label2.BackColor = Color.Red;
});
Thread.Sleep(500);
}
}
catch { }
}
private void FormWorking()
{
try
{
while (Working)
{
Invoke((MethodInvoker)delegate()
{
switch (this.Text)
{
case ".":
this.Text = "..";
break;
case "..":
this.Text = "...";
break;
case "...":
this.Text = "....";
break;
case "....":
this.Text = ".....";
break;
case ".....":
this.Text = "......";
break;
case "......":
this.Text = ".";
break;
}
});
Thread.Sleep(500);
}
}
catch { }
}
private void Form1_Closing(object sender, CancelEventArgs e)
{
Working = false;
}
private void Form1_Load(object sender, EventArgs e)
{
Thread ProgressBarThread = new Thread(new ThreadStart(ProgressBarWorking));
ProgressBarThread.Priority = ThreadPriority.Lowest;
ProgressBarThread.Start();
Thread Label1Thread = new Thread(new ThreadStart(Label1Working));
Label1Thread.Priority = ThreadPriority.Lowest;
Label1Thread.Start();
Thread Label2Thread = new Thread(new ThreadStart(Label2Working));
Label2Thread.Priority = ThreadPriority.Lowest;
Label2Thread.Start();
Thread FormThread = new Thread(new ThreadStart(FormWorking));
FormThread.Priority = ThreadPriority.Lowest;
FormThread.Start();
}
}
}
Hier auch als Visual Studio 2008 Projekt zum Download: http://www.autoid.de.tl/thread-.-~-.-example.htm
Schlagwörter: Thread, CompactFramework, Windows CE, mobile