Windows Application์˜ UI ์ฒ˜๋ฆฌ

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์˜ ํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋™์ž‘์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋Š” ์ €์˜ ์–ด๋–ค ์ฝ”๋”ฉ ์ฒ ํ•™๊ณผ๋„ ๊ฐ™์€ ๊ฒƒ์ธ๋ฐ, ์œ„์™€ ๊ฐ™์ด ํ•˜๋Š” ๋ฐฉ์‹์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ์ €๋ฅผ ๋ถˆํŽธํ•˜๊ฒŒ ํ•˜๋„ค์š”.

๋งค๋ฒˆ ๋ถˆํŽธํ•ด๋„ ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ด์ƒํ•œ๊ฑฐ๊ฒ ๊ฑฐ๋‹ˆ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋‹ค๊ฐ€, ์˜ค๋Š˜์€ ๊ทธ๋ƒฅ ๊ถ๊ธˆํ•ด์„œ ํ•œ ๋ฒˆ ์˜๊ฒฌ์„ ์—ฌ์ญ™๋‹ˆ๋‹ค.

  1. (UI Thread๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ)์œ„์— ์˜ˆ์‹œ๋ฅผ ๋“  ๋Œ€๋กœ ์•„๋ฌด Control์ด๋‚˜ ์ฐ๊ณ  Invoke๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ Window์— ๋Œ€ํ•ด Invoke๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์ •๋ง ๊ฐ™์„๊นŒ์š”? ์ „ ๊ทธ๋ ‡๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š”๋ฐ ํ˜น์‹œ๋‚˜ ์‹ถ์–ด ํ™•์ธ์ฐจ ์—ฌ์ญค๋ด…๋‹ˆ๋‹ค.
  2. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด์ฐจํ”ผ ๊ฐ™์€ ๋™์ž‘์„ ๋ณด์ผํ…๋ฐ Control๋งˆ๋‹ค Invoke๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์—ด์–ด์ค€ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? private์œผ๋กœ ๋…ธ์ถœ์„ ์•ˆ์‹œ์ผฐ๋‹ค๋ฉด ์ฝ”๋”ฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์˜ค์šฉํ•˜์ง€ ์•Š์•˜์„ํ…๋ฐ ๋ง์ด์ฃ .

ํ‘ธ๋… ๋ฐ˜/์งˆ๋ฌธ ๋ฐ˜ ์œผ๋กœ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

.NET Source Browser๋กœ ์‚ดํŽด๋ณด๋‹ˆ ์ฝ”๋“œ๊ฐ€ ์™„์ „ํžˆ ๋™์ผํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ, ์ฐจ์ด์ ์€ Invoke()ํ•˜๋ ค๋Š” ์ปจํŠธ๋กค์˜ ํ•ธ๋“ค์ด ์•„์ง ์ƒ์„ฑ์ด ์•ˆ๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์ •๋„๋ผโ€ฆ ๊ธ€์Ž„์š”. ^^; ์–ด์ œ ์งˆ๋ฌธ๊ธ€์„ ๋ณด๊ณ  ์ €๋„ ํ•œ์ฐธ ์ƒ๊ฐ์„ ํ•ด๋ดค๋Š”๋ฐ ์ œ๊ฐ€ ๊ฒฝํ—˜ํ–ˆ๋˜ ์‚ฌ์šฉ ์•ˆ์—์„œ๋Š” ์–ด๋–ค ์ปจํŠธ๋กค์˜ ์ธ์Šคํ„ด์Šค์ธ๊ฐ€๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์•˜๋˜๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ด์„œ, ๋ช…ํ™•ํ•œ ๋‹ต์„ ๋“œ๋ฆฌ๊ธฐ๋Š” ํž˜๋“œ๋„ค์š”.

๊ฐœ์ธ์ ์œผ๋กœ, public์ด ์•„๋‹Œ protected ์ ‘๊ทผ์ž๊ฐ€ ๋งž์ง€ ์•Š์•˜์—ˆ์„๊นŒ ์ƒ๊ฐํ•ด๋ด…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ BeginInvoke()์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์ปจํŠธ๋กค์ด ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰ํ•ด์ค˜์„œ ์ด๊ฒƒ์€ public ์ ‘๊ทผ์ž๊ฐ€ ๋งž๋Š”๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”
1๊ฐœ์˜ ์ข‹์•„์š”