Wind
C#에서 Windows Windows를 사용하면 경우에 따라 "유효하지 않은 크로스 스레딩 작업"이 발생할 수 있습니다. 이 오류는 컨트롤 생성 외부의 스레드에서 컨트롤에 액세스하려고 할 때 발생합니다. UI 스레드를 차단할 수있는 데이터 작업을 수행하려고 할 때는 일반적 으로이 문제가 발생하여 개발자가 데이터로드에 배경 스레드를 사용 함을 나타냅니다.
문제를 이해하십시오
제공된 시나리오에서 별도의 스레드에 데이터를로드하려고 시도하고 UI (사용자 제어 포함)가 기본 스레드에서 생성됩니다. 사용자 -제어로드 이벤트 액세스 제어 제어 (예 : 텍스트 상자의 값을 확인)하면 "잘못된 크로스 스레딩 작업"오류가 트리거됩니다. 이는 컨트롤이 기본 스레드에서 생성되었고 다른 스레드에서 방문하여 스레드 협회 규칙을 위반했기 때문입니다.
사용하십시오
가능한 솔루션은 제어의 제어 속성을 사용하는 것입니다. 이 속성은 현재 스레드가 컨트롤에 의해 생성 된 스레드와 동일한 지 여부를 나타냅니다. true를 반환하면 올바른 스레드에서 코드를 호출해야합니다.
코드 예제 1
이 예에서, 첫 번째 줄은 수개 차량이 사실인지 확인합니다. 그렇다면 올바른 스레드의 코드 블록을 호출하여 UI에 올바르게 액세스 할 수 있도록하십시오.
대안 : 간접 액세스 제어 값
또 다른 방법은 간접적으로 제어 값을 얻는 것입니다. 배경 스레드에서 직접 컨트롤에 액세스하지 말고 기본 스레드에서 값을 검색하여 백그라운드 작업 장치로 전달하십시오.
이 경우 텍스트 상자 값은 기본 스레드에서 검색되고 로컬 변수에 저장됩니다. 그런 다음 배경 스레드의 데이터로드 작업은이 변수를 안전하게 사용할 수 있습니다.
결론
"잘못된 크로스 -스레딩 작업"이상을 피하기 위해 스레드 협회 규칙을 준수하고 스레드 액세스 제어를 작성하는 것을 명심하십시오. 침략을 사용하여 다른 스레드에서 컨트롤을 안전하게 업데이트하거나 간접 액세스 방법을 사용하여 올바른 스레드에서 제어 값을 검색하는 것을 고려하십시오.
위 내용은 배경 스레드에서 Windows 양식 컨트롤에 안전하게 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!