Heim  >  Artikel  >  Backend-Entwicklung  >  c#-Multithread-Zugriffsschnittstelle

c#-Multithread-Zugriffsschnittstelle

黄舟
黄舟Original
2016-12-21 14:46:091604Durchsuche

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)!




Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn