반응형
async, await 키워드로 비동기 코드(TCP 접속) 테스트(프레임워크 4.5이상)
비동기 루틴 내에서 UI에 접근시 MainUI 스레드 에러 방지 코드(InvokeRequired)
//tcp연결 예제
async void connectTcp() {
TcpClient tcp = new TcpClient();
Label status = labelStatus;//상태표시 라벨
await Task.Run(() => {
try {
setLabel(status, "연결중...", Color.Transparent);
tcp.Connect(IPAddress.Parse("192.168.0.100"), 5000);
} catch(Exception e) {
}
if(tcp.Connected) {
setLabel(status, "연결성공", Color.LightGreen);
} else {
setLabel(status, "연결실패", Color.LightPink);
}
});
}
//비동기에서 UI접근시 MainUI스레드 에러 방지
//(바로 UI에 접근시 MainUI스레드 에러발생!)
private void setLabel(Label label, String text, Color backColor) {
if(this.InvokeRequired) {
this.Invoke(new EventHandler(delegate {
if(text != null) label.Text = text;
if(backColor != null) label.BackColor = backColor;
}));
} else {
if(text != null) label.Text = text;
if(backColor != null) label.BackColor = backColor;
}
}
반응형
'윈폼(Winform)' 카테고리의 다른 글
C# UI Thread Crash 방지(InvokeRequired) (0) | 2021.11.18 |
---|---|
C# 스레드(매개변수) 실행, 동기화(Lock, Monitor) (0) | 2021.11.18 |
C# 줄바꿈 자동 서식 변경(중괄호 {} 사용시) (0) | 2021.11.18 |
C# WinForm 화면 깜빡임 방지 (1) | 2021.11.18 |
C# Round Border Fill Panel (0) | 2021.11.18 |
최근댓글