>  기사  >  백엔드 개발  >  C# 다중 스레드 액세스 인터페이스

C# 다중 스레드 액세스 인터페이스

黄舟
黄舟원래의
2016-12-21 14:46:091557검색

C#2005 이후 인터페이스 제어에 대한 멀티스레드 직접 액세스는 더 이상 지원되지 않지만(인터페이스 생성 스레드와 액세스 스레드는 동일한 스레드가 아님) 대리자를 사용하여 문제를 해결할 수 있습니다.

1. 위임 및 정의 선언
clipboardPRint로 일반 복사 보기
delegate void ShowProgressDelegate(int newPos)
private void ShowProgress(int newPos) 🎜>if (!_progressBar.InvokeRequired )
{
// 그렇지 않은 경우 컨트롤을 직접 조작하십시오.
_progressBar.Value = newPos
}
else
{
// 예 위임을 활성화하려는 경우; access,
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// Invoke를 사용하면 함수 호출이 끝날 때까지 기다리지만 BeginInvoke는 기다리지 않고 바로 돌아갑니다.
this.BeginInvoke( showProgress, 새 객체 [] { newPos });
}
}
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// 결정 스레드 액세스에 있는지 여부
if (!_progressBar.InvokeRequired)
{
// 그렇지 않은 경우 컨트롤을 직접 조작
_progressBar.Value = newPos;
}
else
{
/ / 그렇다면 대리자 액세스 활성화
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// Invoke를 사용하는 경우 함수 호출이 완료될 때까지 기다리지만 BeginInvoke는 기다리지 말고 바로 돌아가세요
this.BeginInvoke(showProgress, new object[] { newPos });
}
}

2. 스레드 기능 정의(인터페이스 컨트롤을 읽을 수 있음) 다른 스레드)
클립보드 인쇄로 일반 복사본 보기
private void ProgressStart()
{
while(true)
{
int newPos = _progressBar.Value + 10>if (newPos > _progressBar.Maximum) {
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string.Format("Pos: {0}", newPos)); 여기서 메소드가 직접 호출됩니다. 내부적으로 위임 활성화 여부를 자동으로 결정합니다.
ShowProgress(newPos);
Thread.Sleep(100);
}
}
private void ProgressStart()
{
while(true)
{
int newPos = _progressBar.Value + 10;
if(newPos > _progressBar.Maximum)
{
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string.Format("Pos: {0}", newPos));
// 여기서 메서드가 직접 호출되며 대리자 활성화 여부를 자동으로 결정합니다
ShowProgress(newPos);
Thread.Sleep (100);
}
}

3. 스레드 시작 및 종료
클립보드 인쇄로 일반 복사본 보기
private Thread _progressThread;
_progressThread = new Thread(new ThreadStart (ProgressStart));
// 선택사항, 기능: 스레드가 종료되지 않더라도 프로세스는 종료될 수 있습니다.
_progressThread.IsBackground =
_progressThread; Start();
_progressThread.Abort( );
// 옵션, 계속하기 전에 스레드가 끝날 때까지 기다립니다.
_progressThread = null; > 위 내용은 C# 멀티스레드 접근 인터페이스 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!




성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.