Microsoft MVP성태의 닷넷 이야기
FromCurrentSynchronizationContext 관련 코드 질문있습니다! [링크 복사], [링크+제목 복사],
조회: 15845
글쓴 사람
한예지 donator
홈페이지
첨부 파일
 

선생님 안녕하세요!

Winform 위에 Button과 statusStrip를 올린 후에,
statusStrip 안에 있는 ▼ 를 클릭 후, StatusLabel을 눌렀습니다.

namespace Test
{
    public partial class Form1 : Form
    {
        private BackgroundWorker _worker = new BackgroundWorker();
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        
            toolStripStatusLabel1.Text = "";
            // ⓐ
            TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            Task.Run(() => {
                DoSomething();
            })
            .ContinueWith(task => { toolStripStatusLabel1.Text = "종료"; }, uiScheduler); // ⓑ
        }
        
        private void DoSomething()
        {
            // 4000[ms] = 4초
            Thread.Sleep(4000);// 본래는 시간이 소요되는 처리
        }
    }
}

ⓐ TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
이 코드를 통해 Main Thread(= UI Thread)의 스케줄러를 가져옵니다.

ⓑ .ContinueWith(task => { toolStripStatusLabel1.Text = "종료"; }, uiScheduler);
ContinueWith의 두 번째 매개변수로 Main 스레드(= UI Thread)의 스케줄러를 넘기면
첫 번째 매개변수로 넘어온 람다식을 스케줄러로 넘어온 Main 스레드(= UI Thread)에서 실행하도록 한다.


혹시 위의 코드를 제가 임의로 해석한 부분 중에 혹시 잘못된 것이 있는지 확인해주실 수 있으신가요~?









[최초 등록일: ]
[최종 수정일: 5/5/2021]


비밀번호

댓글 작성자
 



2021-05-05 06시09분
해석하신 것이 맞습니다. 그리고, 해당 코드는 async/await로 동일한 효과를 누릴 수 있습니다.

private async void button1_Click(object sender, EventArgs e)
{
    await DoSomething();
    toolStripStatusLabel1.Text = "종료";
}

private async Task DoSomething()
{
    await Task.Delay(4000);// 본래는 시간이 소요되는 처리
    // 만약 실제로 Task.Delay를 사용하는 경우라면 굳이 await을 하지 않고 직접 반환
    // return Task.Delay(4000);
}
정성태
2021-05-05 07시16분
[한예지] 답변해주셔서 감사드립니다!!
[guest]

... 91  92  93  94  [95]  96  97 
NoWriterDateCnt.TitleFile(s)
77정성태1/25/200515258    답변글 [답변]: 질문이 있는데요....
78임은선1/26/200515835        답변글 [답변]: [답변]: 질문이 있는데요....
72최정희1/19/200515230또 접니다.
73정성태1/19/200514997    답변글 [답변]: 또 접니다. [2]
74최정희1/19/200514357        답변글 [답변]: [답변]: 당연히 도움이 되지요.
75정성태1/19/200514960            답변글 [답변]: [답변]: [답변]: 당연히 도움이 되지요.
69최정희10/13/200414307저 기억하실런지? 그때 두리로IE툴바 만들어 주셨죠.
62엄길웅10/1/200415481매번 물어보기만 하는군요..
63정성태10/2/200415305    답변글 [답변]: 매번 물어보기만 하는군요..
64keal...10/5/200416961        답변글 [답변]: [답변]: 매번 물어보기만 하는군요..
65정성태10/6/200416823            답변글 [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
68keal...10/11/200414512                답변글 [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
71정성태10/31/200414586                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
58엄길웅9/30/200414730안녕하세요.. 추석은 잘 보내셨는지요?
59정성태9/30/200414773    답변글 [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
60엄길웅10/1/200414731        답변글 [답변]: [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
56엄길웅9/23/200414985ATL을 이용해서 함수를 하나 만들었습니다.
57정성태9/23/200416034    답변글 [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
61엄길웅10/1/200414741        답변글 [답변]: [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
54차광석8/26/200414853잘 지내시죠?
55정성태8/27/200413947    답변글 [답변]: 잘 지내시죠?
52김명원8/3/200414800질문이요..
53정성태8/19/200414694    답변글 [답변]: 질문이요..
50김상표7/5/200414548질문요...
51정성태7/6/200414395    답변글 [답변]: 질문요...
45송야5/29/200414500웹페이지 자동로그인..
... 91  92  93  94  [95]  96  97