리눅스맨

c# stackhash bex error cross thread invoke

c# 언어로 프로그램을 개발하는 도중 문제 이벤트 이름: BEX 라는 명칭으로 에러가 발생하였습니다.

오류 모듈 이름은 StackHash _ xxxx  이며 이를 구글에 검색해보았지만 익스플로러의 고급 설정인 렌더링을 소프트 방식으로 바꾸라는 방법만 제시하더군요.

 

인터넷 익스플로러 고급설정에 들어갑니다.

인터넷 옵션 – 가속 그래픽 – GPU 렌더링 대신 소프트웨어 렌더링 사용*

이 항목을 클릭하면 해결된다는 MS의 공지가 있었지만 오히려 또 다른 에러를 발생하게 만들더군요.

 

윈도우 10 메인PC에서는 아무런 에러가 발생하지 않지만 윈도우7 가상화 윈도우에서는 특정 DOCUMENT에 의해서 수시로 반응하여

에러로 프로그램이 종료되는것을 확인하였습니다.

 

결국 소스코드 내의 Cross Thread 부분을 수정해주면서 해결되었습니다.

웹브라우저를 실행하고 그 안에서( 또다른 쓰레드 ) 교차현상이 발생하여 같은 동시간대 같은 쓰레드가 같은 모듈을 이용할때 에러가 난것으로 파악되었습니다.

이부분에 대한 소스코드를 공개합니다.

 

TextBox 의 값을 가져올때에는 아래 소스를 이용하면됩니다.


private string getText(TextBox textbox)
{
// result value.
string result = string.Empty;

var getTextValue = new Action(() => result = textbox.Text);

if (textbox.InvokeRequired)
textbox.Invoke(getTextValue);
else
getTextValue();

// return the result.
return result;

}

CheckBox의 Checked ( True, False ) 값을 가져올 때에는 아래 소스를 이용하면됩니다.

private bool Checkbox_checked()
{
// result value.
bool result = false;

// define a function which assigns the checkbox checked state to the result
var checkCheckBox = new Action(() => result = checkBox_특정문자열.Checked);

// check if it should be invoked. 
if (checkBox_특정문자열.InvokeRequired)
checkBox_특정문자열.Invoke(checkCheckBox);
else
checkCheckBox();

// return the result.
return result;
}

 

 


게시됨

카테고리

,

작성자

태그: