Windows Application์ COM์ผ๋ก ๋ถํฐ ์์๋์ด ์ ํต์ ์ผ๋ก STA๋ผ๋ ๊ฒ์ ๋ง์ด ์๋ ค์ง ๋ด์ฉ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ์ฝ๋ฉํ ๋๋ ๋ค๋ฐฉ๋ฉด์ผ๋ก ์ฝ๋ฉํ ์ ์๋๋ก ์ด์ด๋ ๊ฒ์ผ๊น์?
์๋ฅผ ๋ค์ด์, Winform์์๋ ์ํธ๋ฆฌ ํฌ์ธํธ์ธ Main ๋ฉ์๋์์ Application.Run์ ํตํด Form์ ์์ํ๋ฉด, UI Thread๋ 1๊ฐ๊ฐ ๋๊ณ , ์ดํ Invoke๋ฅผ ์ฌ์ฉํด์ผํ ๋ ๋ชจ๋ ์ด UI Thread๋ฅผ ์ด์ฉํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋ฉํ ๋๋ Control.Invoke๋ฅผ ํตํด ์ปจํธ๋กค๋ง๋ค Invoke๋ฅผ ๋ฐ๋ก๋ฐ๋ก ํธ์ถํ ์ ์๋๋ก ๋์ด์์ต๋๋ค.
์ค์ง์ ์ผ๋ก ๋์์ Control๋ง๋ค Invoke๋ฅผ ๋์์ํค๋, Main Form์ ๋ํด this.Invoke๋ฅผ ํ๋ ๋์์ด ๊ฐ์๋ฐ ๋ง์ด์ฃ .
WPF์ ๊ฒฝ์ฐ์๋ Control๋ค์ด DispatcherObject๋ฅผ ์์๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ง๋ค invoke๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ค์ ๋์์ DispatcherSynchoronizationContext๋ฅผ ํตํด ํ๋์ Dispatcher์์ Queueing ๋์ด ์ฒ๋ฆฌ๋จ์๋ ๋ถ๊ตฌํ๊ตฌ์.
์ฌ์ง์ด DispatcherObject๋ค์ ๋ณธ์ธ์ ์์ฑํ Thread๊ฐ ๋๊ตฌ์ธ์ง Context์ ํฌ์ธํฐ๋ฅผ ๋ชจ๋ ๊ฐ๊ณ ์์ต๋๋ค.
์ฝ๋๊ฐ ๋ค๋ฅด๋ฉด ๋์์ด ๋ฌ๋ผ์ผ ํ๋ค๋ ์ ์ ์ด๋ค ์ฝ๋ฉ ์ฒ ํ๊ณผ๋ ๊ฐ์ ๊ฒ์ธ๋ฐ, ์์ ๊ฐ์ด ํ๋ ๋ฐฉ์์ด ์ฝ๋๋ฅผ ๋ณด๋ ์ ๋ฅผ ๋ถํธํ๊ฒ ํ๋ค์.
๋งค๋ฒ ๋ถํธํด๋ ๊ทธ๋ฅ ๋ด๊ฐ ์ด์ํ๊ฑฐ๊ฒ ๊ฑฐ๋ ํ๊ณ ๋์ด๊ฐ๋ค๊ฐ, ์ค๋์ ๊ทธ๋ฅ ๊ถ๊ธํด์ ํ ๋ฒ ์๊ฒฌ์ ์ฌ์ญ๋๋ค.
- (UI Thread๊ฐ 1๊ฐ์ผ ๊ฒฝ์ฐ)์์ ์์๋ฅผ ๋ ๋๋ก ์๋ฌด Control์ด๋ ์ฐ๊ณ Invoke๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ๋์ Window์ ๋ํด Invoke๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ๋ง ๊ฐ์๊น์? ์ ๊ทธ๋ ๊ฒ ์๊ณ ์๋๋ฐ ํน์๋ ์ถ์ด ํ์ธ์ฐจ ์ฌ์ญค๋ด ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ด์ฐจํผ ๊ฐ์ ๋์์ ๋ณด์ผํ ๋ฐ Control๋ง๋ค Invoke๊ฐ ๊ฐ๋ฅํ๋๋ก ์ด์ด์ค ์ด์ ๋ ๋ฌด์์ผ๊น์? private์ผ๋ก ๋ ธ์ถ์ ์์์ผฐ๋ค๋ฉด ์ฝ๋ฉํ๋ ์ฌ๋๋ค์ด ์ค์ฉํ์ง ์์์ํ ๋ฐ ๋ง์ด์ฃ .
ํธ๋ ๋ฐ/์ง๋ฌธ ๋ฐ ์ผ๋ก ์ฌ๋ฆฝ๋๋ค.