Microsoft MVP성태의 닷넷 이야기
FromCurrentSynchronizationContext 관련 코드 질문있습니다! [링크 복사], [링크+제목 복사],
조회: 13706
글쓴 사람
한예지 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]

... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...
NoWriterDateCnt.TitleFile(s)
232정준명8/30/200512762[질문] HTTP 모듈/핸들러 또는 RewriteURL 관련입니다. [4]
231이진일8/30/200511542참조한 dll 들은 어떻게 배포하나요...? [1]
2303028/29/200512703[질문] 웹에서 Exchange Server 사용자 추가 [2]
229김재명8/26/200512091성태님의 홈페이지 J & J의경우 보안모듈을 어떻게 해결하셨는지 궁금합니다. [1]
227임규진8/24/200512009리소스 파일에 그림 첨가하는 방법 좀 알려 주세요. [1]
226최인호8/19/200511975스마트 클라이언트 exe 버젼 실행시 시간이 너무 오래 걸립니다. [1]
225코디8/17/200512336[질문]닷넷프레임워크 설치여부 [1]
224박준현8/17/200511771[질문]중첩 그리드라고 해야 할까요? [1]
223매커7/28/200511209강좌 잘 읽었습니다. [1]
222김지영7/27/200512670C#에서 oledb 사용하다가 에러 [2]
221박민우7/26/200513283스마트클라이언트에서의 DB접속 [1]
220테드7/22/200512384스마트 클라이언트에서 원치 않는 패킷 송수신 문제... [3]
219김종욱7/21/200512685안녕하세요... 툴밴드 콤보 박스에 대해.. [1]
2187/21/200511311스마트 클라이언트에 대한 질문 입니다. [1]파일 다운로드1
217왕초보7/21/200511946마소강좌의 AxForSmartClient 를 실행시키고 싶은데요... [1]
215궁금증6/23/200511558도대체 이게 무슨 에러 일까요... [1]
213궁금이6/18/200513284Winform 형태의 NTD에서 사용자 로그인 성공 여부 정보 유지하는 방법 [1]
212궁금이6/16/200511186ActiveX 컨트롤이 NTD에 이상이 없는지요? [1]
211류성태6/15/200511838smart client에 관하여.... [1]
206헤커의작...6/14/200510727[질문] 안녕하세요. 성태님의 홈페이지에서 화면전환시 처리되는 것에 관련된 건 [3]
205김종욱 6/12/200511202com+ 에서 서버 소켓을 열고 싶고요... com+에서 thread는 어떻게 돌리는지 알고 싶습니다
209정성태6/14/200511088    답변글 [답변]: com+에서 서버 소켓을 열고 싶고요... com+에서 thread는 어떻게 돌리는지 알고 싶습니다
204정현일6/9/200511439Smart Client 실행시 SecurityException파일 다운로드1
208정성태6/14/200511768    답변글 [답변]: Smart Client 실행시 SecurityException [1]
203나그네6/9/200511791태오 사이트 Smart Client 강좌중에서요
207정성태6/14/200511263    답변글 [답변]: 태오 사이트 Smart Client 강좌중에서요
... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...