최근에 윈도우 어플을 개발할 일이 생겼다.

.NET 4.5부터 async 문법이 새로 들어갔다 해서.. 이왕 하는거 4.5.2로… 만들기로 했다. 오…… 엄청나게 편리하다.!!

async, await 두개가 중요하다. 특히 UI프로그램에서 background thread와 main thread와의 동기화를 쉽게 지원한다.

아래는 id/pwd를 입력받아서 서버통신으로 인증을 진행하는 코드다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private async void btnLogin_Click(object sender, RoutedEventArgs e)
{
    string id = tbEmail.Text;
    string pwd = tbPassword.Password;

    SetControlEnableState(false);
    bool isSuccess = await Task.Run<bool>(() =>
    {
        try
        {
                    // 여기가 네트워크 통신을 하는 부분이다.
            _dataCore.DoLogin(id, pwd);
            return true;
        }
        catch (Exception x)
        {
            ErrorHandler.ErrorDump(x, true);
            return false;
        }
        });

    if (!isSuccess)
    {
        SetControlEnableState(true);
        return;
    }
}

보면 알겠지만 client이벤트에서 바로 … 별도 쓰레드 동기화 없이.. 로그인 처리를 모두 완료했다.

오늘 테스트를 진행하는데… .NET Framework 4.5 깔린… PC가.. 많이 없네…..

… 그래서.. 4.0으로.. BackgroundWorker 사용해서 재개발했다…

그지 같네… (화면이 세개인 프로그램이라 다행)