글쓴 사람
따봉이 (pbird32 at naver.com)
홈페이지
첨부 파일
안녕하세요.
비동기로 UI쓰레드외 다른 쓰레드에서 UI 접근 시 크로스쓰레드 에러가 발생하는데요
그래서
Invoke((MethodInvoker)delegate() { settext(); });
Invoke를 사용하면 UI쓰레드로 턴을 넘겨서 비동기로 구현이 가능한데
이게 비동기 Task 에 Wait만 걸어주면 Invoke에서 멈춰버리네요.
비동기 구현 시 해당 Task Wait를 사용하려면 UI와 연관이 없어야지만 사용가능한건가요?
아니면 다른 해결 방법이 있을까요? ㅜㅜ
---테스트 코드
private void settext()
{
if(InvokeRequired)
{
Invoke((MethodInvoker)delegate() { settext(); }); ///<-----여기서 멈춥니다.
}
else
{
textBox1.Text = "test";
}
}
private void button1_Click_1(object sender, EventArgs e)
{
Task.Run(() =>
{
settext();
}).Wait(); //<---- wait를 사용하지 않으면 정상 작동되는데 wait만 사용하면 위에코드 invoke에서 멈춥니다.
}
[최초 등록일: ]
[최종 수정일: 7/21/2022]
No | Writer | Date | Cnt. | Title | File(s) |