Heim > Artikel > Backend-Entwicklung > c#-Multithread-Zugriffsschnittstelle
Nach C#2005 wird der direkte Multithread-Zugriff auf Schnittstellensteuerelemente nicht mehr unterstützt (der Schnittstellenerstellungs-Thread und der Zugriffs-Thread sind nicht derselbe Thread), Sie können das Problem jedoch mit „delegieren“ lösen:
{
// Wenn nicht, bedienen Sie das Steuerelement direkt
_progressBar.Value = newPos;
}
else
{
// Ja, wenn Sie die Delegierung aktivieren möchten access,
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress); showProgress, neues Objekt [] { newPos });
}
}
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// Bestimmen ob es sich im Thread befindet Zugriff
if (!_progressBar.InvokeRequired)
{
// Wenn nicht, bedienen Sie das Steuerelement direkt
_progressBar.Value = newPos;
}
else
{
/ / Wenn ja, aktivieren Sie den Delegatenzugriff
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// Wenn Sie Invoke verwenden, warten Sie, bis der Funktionsaufruf abgeschlossen ist, BeginInvoke jedoch Nicht warten und direkt zurück gehen
this.BeginInvoke(showProgress, new object[] { newPos });
}
}
2. Thread-Funktion definieren (Interface-Controls können eingelesen werden ein anderer Thread)
view plaincopy to clipboardprint?
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar.Maximum) {
newPos = _progressBar.Minimum>}
Trace.WriteLine(string.Format("Pos: {0}", newPos)// Die Methode wird hier intern direkt aufgerufen. Bestimmen Sie automatisch, ob der Delegat aktiviert ist
ShowProgress(newPos>}
}
private void ProgressStart(){
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar.Maximum)
{
newPos = _progressBar.Minimum;
}
Trace. WriteLine(string.Format("Pos: {0}", newPos));
// Die Methode wird hier direkt aufgerufen und bestimmt automatisch, ob Delegat aktiviert werden soll
ShowProgress(newPos);
Thread.Sleep (100);
}
}
3. Thread-Start und -Beendigung
Klarkopie in Zwischenablage anzeigen?
privater Thread _progressThread;
_progressThread = new Thread(new ThreadStart (ProgressStart));
/ Optional, Funktion: Auch wenn der Thread nicht endet, kann der Prozess beendet werden
_progressThread. Start();
_progressThread( );
// Optional, Funktion: warten, bis der Thread endet
_progressThread.Join();
_progressThread = null; > Das Obige ist der Inhalt der c#-Multithread-Zugriffsschnittstelle. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!