์๋
ํ์ธ์. 
C# 9.0 ๊ธฐ๋ฅ์ธ Top-level Statements์ ๋ํด ์์๋ณด๊ณ ์๋๋ฐ์.
ํน์ WPF๋ ์คํํ ์ ์์๊น์?
Console์ ๊ฒฝ์ฐ์๋ ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
using System;
Console.WriteLine("Hello");
Console.WriteLine(args);
๊ทธ๋์ ์ด์ ๋น์ทํ๊ฒ WPF๋ ์์ฉํด๋ณด์์ต๋๋ค.
using System;
Application app = new Application();
app.Startup += (s, e) => new Window().Show();
app.Run();
์ฑ์ ์คํํ๋ฉด [STAThread] ๊ด๋ จ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
๋ง์ UI ๊ตฌ์ฑ ์์์์ ํธ์ถ ์ค๋ ๋๊ฐ ํ์ํ๋ฏ๋กโฆ
๊ทธ๋์ [STAThread]๋ ์ถ๊ฐํด๋ดค์ต๋๋ค.
using System;
[STAThread]
void WpfStart()
{
Application app = new Application();
app.Startup += (s, e) => new Window().Show();
app.Run();
}
WpfStart();
์ด๋ ๊ฒ๋ ํด๋ดค์ง๋ง ๋์ผํ ์๋ฌ๊ฐ ๋ฐ์๋ฉ๋๋ค.
ํน์ ์ ๊ฐ ์๋ชป ์ฌ์ฉํ ๋ถ๋ถ์ด ์์๊น์? ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ๋ฅ์ด ์ด๋ค ์๋๋ก ์ฌ์ฉ๋์ผ ํ๋์ง๋ ๊ถ๊ธํฉ๋๋ค!
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
2๊ฐ์ ์ข์์
dimohy
2
Top-level Statements๋ attribute๋ฅผ ์ธ ์ ์๋ ๊ฒ์ผ๋ก ํ์ธ๋ฉ๋๋ค. TLS๋ ์ฒ์ C# ์ ์ ํ๋ ์ฌ๋์ด ์ธ์ด๋ฅผ ์ ๊ทผํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํ ๋ชฉ์ ์ด ์์ด์ ๊ทธ๋ฐ๊ฒ ๊ฐ์ต๋๋ค.
2๊ฐ์ ์ข์์
kevin13
3
์ด์ฉ ์ ์์ต๋๋ค. ์ง์ ํด์ค์ผ์ฃ . ^^; ์๋์ ๊ธ์ ๊ด๋ จ ๋ต๋ณ์ด ์์ต๋๋ค.
[c# 9.0 - How to handle {STAThread] in C# 9 Using Top-Level Program.cs - Stack Overflow](c# 9.0 - How to handle {STAThread] in C# 9 Using Top-Level Program.cs - Stack Overflow)
ํน์ ์ข ๋ ๋ณต์กํ์ง๋ง ์๋์ ๊ธ์ ์๋ StartSTATask ๋ฉ์๋๋ฅผ ์ด์ฉํด,
c# - Set ApartmentState on a Task - Stack Overflow
๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ์ฝ๋ฉํ๋ฉด ๋ฉ๋๋ค.
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
await StartSTATask(() =>
{
Application app = new Application();
app.Startup += (s, e) => new Window().Show();
app.Run();
return 0;
});
static Task<T> StartSTATask<T>(Func<T> func)
{
var tcs = new TaskCompletionSource<T>();
Thread thread = new Thread(() =>
{
try
{
tcs.SetResult(func());
}
catch (Exception e)
{
tcs.SetException(e);
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
return tcs.Task;
}
4๊ฐ์ ์ข์์
rkttu
4
๋น์ทํ ์ด์ ๋ก Windows Forms ์ ํ๋ฆฌ์ผ์ด์
๋ TLP ๊ธฐ๋ฅ์ผ๋ก ์ฝ๋๋ฅผ ์์ํ ์ ์๊ณ , ์์ ๋ถ๋ค์ด ๋ต๊ธ์ ๋ฌ์์ฃผ์ ๊ฒ์ฒ๋ผ workaround๋ฅผ ์
ํ์ผ ํ๋๋ฐ โ๊ตณ์ด?โ ์ถ์ ๋ถ๋ถ์ด ์๊ธฐ๋ ๊ฒ ๊ฐ์์. ใ
ใ
2๊ฐ์ ์ข์์
rkttu
5
์, ๊ทธ๋ฆฌ๊ณ ์ด์ WPF์ ๊ด๋ จ๋ ๋ด์ฉ์ ์๋์ฐ ๋ฐ์คํฌํฑ Q&A ์ชฝ์ผ๋ก ์ฌ๋ ค์ฃผ์๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! @jamesnet214
2๊ฐ์ ์ข์์
dimohy
6
Thread.CurrentThread.SetApartmentState(ApartmentState.Unknown);
Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
๋ฅผ ํตํด ์ต์์๋ฌธ์์ [STAThread] ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค๊ณ ํฉ๋๋คโฆ ์ ํ์ธํด๋ดค๋๋ ๋๋ค์.
2๊ฐ์ ์ข์์