/*
 * static Color [] fogarr = new Color[140];
 */

fogarr[0]= Color.FromArgb(240,248,255);
fogarr[1]= Color.FromArgb(255,160,122);
fogarr[2]= Color.FromArgb(250,235,215);
fogarr[3]= Color.FromArgb(32,178,170);
fogarr[4]= Color.FromArgb(0,255,255);
fogarr[5]= Color.FromArgb(135,206,250);
fogarr[6]= Color.FromArgb(127,255,212);
fogarr[7]= Color.FromArgb(119,136,153);
fogarr[8]= Color.FromArgb(240,255,255);
fogarr[9]= Color.FromArgb(176,196,222);
fogarr[10]= Color.FromArgb(245,245,220);
fogarr[11]= Color.FromArgb(255,255,224);
fogarr[12]= Color.FromArgb(255,228,196);
fogarr[13]= Color.FromArgb(0,255,0);
fogarr[14]= Color.FromArgb(0,0,0);
fogarr[15]= Color.FromArgb(50,205,50);
fogarr[16]= Color.FromArgb(255,255,205);
fogarr[17]= Color.FromArgb(250,240,230);
fogarr[18]= Color.FromArgb(0,0,255);
fogarr[19]= Color.FromArgb(255,0,255);
fogarr[20]= Color.FromArgb(138,43,226);
fogarr[21]= Color.FromArgb(128,0,0);
fogarr[22]= Color.FromArgb(165,42,42);
fogarr[23]= Color.FromArgb(102,205,170);
fogarr[24]= Color.FromArgb(222,184,135);
fogarr[25]= Color.FromArgb(0,0,205);
fogarr[26]= Color.FromArgb(95,158,160);
fogarr[27]= Color.FromArgb(186,85,211);
fogarr[28]= Color.FromArgb(127,255,0);
fogarr[29]= Color.FromArgb(147,112,219);
fogarr[30]= Color.FromArgb(210,105,30);
fogarr[31]= Color.FromArgb(60,179,113);
fogarr[32]= Color.FromArgb(255,127,80);
fogarr[33]= Color.FromArgb(123,104,238);
fogarr[34]= Color.FromArgb(100,149,237);
fogarr[35]= Color.FromArgb(0,250,154);
fogarr[36]= Color.FromArgb(255,248,220);
fogarr[37]= Color.FromArgb(72,209,204);
fogarr[38]= Color.FromArgb(220,20,60);
fogarr[39]= Color.FromArgb(199,21,112);
fogarr[40]= Color.FromArgb(0,255,255);
fogarr[41]= Color.FromArgb(25,25,112);
fogarr[42]= Color.FromArgb(0,0,139);
fogarr[43]= Color.FromArgb(245,255,250);
fogarr[44]= Color.FromArgb(0,139,139);
fogarr[45]= Color.FromArgb(255,228,225);
fogarr[46]= Color.FromArgb(184,134,11);
fogarr[47]= Color.FromArgb(255,228,181);
fogarr[48]= Color.FromArgb(169,169,169);
fogarr[49]= Color.FromArgb(255,222,173);
fogarr[50]= Color.FromArgb(0,100,0);
fogarr[51]= Color.FromArgb(0,0,128);
fogarr[52]= Color.FromArgb(189,183,107);
fogarr[53]= Color.FromArgb(253,245,230);
fogarr[54]= Color.FromArgb(139,0,139);
fogarr[55]= Color.FromArgb(128,128,0);
fogarr[56]= Color.FromArgb(85,107,47);
fogarr[57]= Color.FromArgb(107,142,45);
fogarr[58]= Color.FromArgb(255,140,0);
fogarr[59]= Color.FromArgb(255,165,0);
fogarr[60]= Color.FromArgb(153,50,204);
fogarr[61]= Color.FromArgb(255,69,0);
fogarr[62]= Color.FromArgb(139,0,0);
fogarr[63]= Color.FromArgb(218,112,214);
fogarr[64]= Color.FromArgb(233,150,122);
fogarr[65]= Color.FromArgb(238,232,170);
fogarr[66]= Color.FromArgb(143,188,143);
fogarr[67]= Color.FromArgb(152,251,152);
fogarr[68]= Color.FromArgb(72,61,139);
fogarr[69]= Color.FromArgb(175,238,238);
fogarr[70]= Color.FromArgb(40,79,79);
fogarr[71]= Color.FromArgb(219,112,147);
fogarr[72]= Color.FromArgb(0,206,209);
fogarr[73]= Color.FromArgb(255,239,213);
fogarr[74]= Color.FromArgb(148,0,211);
fogarr[75]= Color.FromArgb(255,218,155);
fogarr[76]= Color.FromArgb(255,20,147);
fogarr[77]= Color.FromArgb(205,133,63);
fogarr[78]= Color.FromArgb(0,191,255);
fogarr[79]= Color.FromArgb(255,192,203);
fogarr[80]= Color.FromArgb(105,105,105);
fogarr[81]= Color.FromArgb(221,160,221);
fogarr[82]= Color.FromArgb(30,144,255);
fogarr[83]= Color.FromArgb(176,224,230);
fogarr[84]= Color.FromArgb(178,34,34);
fogarr[85]= Color.FromArgb(128,0,128);
fogarr[86]= Color.FromArgb(255,250,240);
fogarr[87]= Color.FromArgb(255,0,0);
fogarr[88]= Color.FromArgb(34,139,34);
fogarr[89]= Color.FromArgb(188,143,143);
fogarr[90]= Color.FromArgb(255,0,255);
fogarr[91]= Color.FromArgb(65,105,225);
fogarr[92]= Color.FromArgb(220,220,220);
fogarr[93]= Color.FromArgb(139,69,19);
fogarr[94]= Color.FromArgb(248,248,255);
fogarr[95]= Color.FromArgb(250,128,114);
fogarr[96]= Color.FromArgb(255,215,0);
fogarr[97]= Color.FromArgb(244,164,96);
fogarr[98]= Color.FromArgb(218,165,32);
fogarr[99]= Color.FromArgb(46,139,87);
fogarr[100]= Color.FromArgb(128,128,128);
fogarr[101]= Color.FromArgb(255,245,238);
fogarr[102]= Color.FromArgb(0,128,0);
fogarr[103]= Color.FromArgb(160,82,45);
fogarr[104]= Color.FromArgb(173,255,47);
fogarr[105]= Color.FromArgb(192,192,192);
fogarr[106]= Color.FromArgb(240,255,240);
fogarr[107]= Color.FromArgb(135,206,235);
fogarr[108]= Color.FromArgb(255,105,180);
fogarr[109]= Color.FromArgb(106,90,205);
fogarr[110]= Color.FromArgb(205,92,92);
fogarr[111]= Color.FromArgb(112,128,144);
fogarr[112]= Color.FromArgb(75,0,130);
fogarr[113]= Color.FromArgb(255,250,250);
fogarr[114]= Color.FromArgb(255,240,240);
fogarr[115]= Color.FromArgb(0,255,127);
fogarr[116]= Color.FromArgb(240,230,140);
fogarr[117]= Color.FromArgb(70,130,180);
fogarr[118]= Color.FromArgb(230,230,250);
fogarr[119]= Color.FromArgb(210,180,140);
fogarr[120]= Color.FromArgb(255,240,245);
fogarr[121]= Color.FromArgb(0,128,128);
fogarr[122]= Color.FromArgb(124,252,0);
fogarr[123]= Color.FromArgb(216,191,216);
fogarr[124]= Color.FromArgb(255,250,205);
fogarr[125]= Color.FromArgb(253,99,71);
fogarr[126]= Color.FromArgb(173,216,230);
fogarr[127]= Color.FromArgb(64,224,208);
fogarr[128]= Color.FromArgb(240,128,128);
fogarr[129]= Color.FromArgb(238,130,238);
fogarr[130]= Color.FromArgb(224,255,255);
fogarr[131]= Color.FromArgb(245,222,179);
fogarr[132]= Color.FromArgb(250,250,210);
fogarr[133]= Color.FromArgb(255,255,255);
fogarr[134]= Color.FromArgb(144,238,144);
fogarr[135]= Color.FromArgb(245,245,245);
fogarr[136]= Color.FromArgb(211,211,211);
fogarr[137]= Color.FromArgb(255,255,0);
fogarr[138]= Color.FromArgb(255,182,193);
fogarr[139]= Color.FromArgb(154,205,50);

#Color class 배열을 이용한 다양한 색상나타내기
#Color class 배열을 이용한 다양한 색상나타내기

#현재 Form에 대한 this 핸들얻기
#현재 Form에 대한 this 핸들얻기

#Color 배열(140개)



using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Drawing2D;

class Program : Form
{
    private const int WM_KEYDOWN = 0x0100;
    private const int WM_PAINT = 0x000F;
    private const int WM_CREATE = 0x0001;

    static Graphics graphics;
    static Font font;
    static Color [] fogarr = new Color[140]; //배열선언
    static int toggle=0;
    static int ____index=0;
    static Program fi;

    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Program());
    }

    static void __time_tick(object sender, ElapsedEventArgs e)
    {
        for (int h = 0; h <= 52; h++)
        {
            HatchStyle hs = (HatchStyle)h;
            Brush hb = new HatchBrush(hs, fogarr[____index % 140]);
            graphics.FillRectangle(hb, new Rectangle((h/26)*250, (h%26)*20, 50, 20));
            graphics.DrawString(hs.ToString(), font, Brushes.DarkGreen, (h/26)*250+50, (h%26)*20);
        }
        fi.Text = fogarr[____index % 140].ToString();
        ____index++;
    }

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);

        switch(m.Msg)
        {
            case WM_PAINT:
            if(toggle==0)
            {
                this.Size = new Size(800,600);
                this.Text = "HatchStyle Window Information";

                graphics = this.CreateGraphics();
                font = new Font("고딕", 12, FontStyle.Bold);
                toggle=100;
            }
            break;
            case WM_CREATE :
               

                fi = new Program();
                fi = this;


                fogarr[0]= Color.FromArgb(240,248,255); //초기화 
                fogarr[1]= Color.FromArgb(255,160,122);
                fogarr[2]= Color.FromArgb(250,235,215);
                fogarr[3]= Color.FromArgb(32,178,170);
                fogarr[4]= Color.FromArgb(0,255,255);
                fogarr[5]= Color.FromArgb(135,206,250);
                /*
                ,, 자세한 Color.FromArgb List는 c#강의리스트에 올려놓았습니다. 참고부탁드려요.^
                */
                fogarr[134]= Color.FromArgb(144,238,144);
                fogarr[135]= Color.FromArgb(245,245,245);
                fogarr[136]= Color.FromArgb(211,211,211);
                fogarr[137]= Color.FromArgb(255,255,0);
                fogarr[138]= Color.FromArgb(255,182,193);
                fogarr[139]= Color.FromArgb(154,205,50);
                break;
            case WM_KEYDOWN :

            Keys keyCode = (Keys)m.WParam & Keys.KeyCode;

            if(keyCode.ToString() == "F1")
            {
                tm = new System.Timers.Timer();
                tm.Interval=100;
                tm.Elapsed += new ElapsedEventHandler(__time_tick);
                tm.Start();
            }
            else if(keyCode.ToString() == "F2")
            {

                if(tm != null)   //예외 사항체크
                {
                    tm.Stop();
                    tm.Elapsed -= __time_tick;
                }            }
            else
            {
                for (int h = 0; h <= 52; h++)
                {
                    HatchStyle hs = (HatchStyle)h;
                    Brush hb = new HatchBrush(hs, fogarr[____index % 140]);
                    graphics.FillRectangle(hb, new Rectangle((h/26)*250, (h%26)*20, 50, 20));
                    graphics.DrawString(hs.ToString(), font, Brushes.DarkGreen, (h/26)*250+50, (h%26)*20);
                }
                this.Text = fogarr[____index % 140].ToString();
                ____index++;
                break;
            }//end if else

        }//end of switch
    }//end of method
}//end of class

#컨트롤에 포커스가 자동으로 안갈 때
#컨트롤에 포커스가 자동으로 안갈 때
#컨트롤에 포커스가 자동으로 안갈 때
#컨트롤에 포커스가 자동으로 안갈 때



case WM_PAINT:
if(toggle==0)
{
this.Size = new Size(1000,600);
this.Text = "TRIS BY CONSOLE FORM";

graphics = CreateGraphics();
font = new Font("바탕체", 17, FontStyle.Bold);

toggle=100;

timer = new System.Timers.Timer();
timer.Interval = 800;
timer.Elapsed += new ElapsedEventHandler(__time_tick);
timer.Start();

mainBackColor = this.BackColor;

MessageBox.Show("TRIS START, Time Interval:" + timer.Interval);

//Form에 focus가 가도록 하기. 키보드 컨트롤을 이용할수 있다.
this.Activate();
this.Focus();


var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE); // 숨기기

init(ref t_tris, ref xpos, ref ypos, ref __design);
DrawTerisAll(t_tris);
}
break;

#설명:Windows10 Console창에서 실행하는 테트리스 프로그램 소스입니다.
#메모장에서 코드작성후에, C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe 로 컴파일 & 링크
#IDE는 사용하지 않습니다.(Visual Studio와 같은)

#HatchStyle 적용

#Tris Form Game by console base
#Tris Form Game by console base

#IDE(No Needed), Memo is sufficient, Window10 csc.exe is sufficient.

 

if(____t_tris[mm, nn]==0) 
{
#if false
    Brush brush = new SolidBrush(mainBackColor);
    graphics.FillRectangle(brush, 
    new Rectangle(50 + nn * ____WIDTH, 
                      40 + mm * ____HEIGHT, 
                      ____WIDTH-1, ____HEIGHT-1));
#endif   
  
#if true
    HatchStyle hs = (HatchStyle)____hatch_style;
    Brush hb = new HatchBrush(hs, mainBackColor);
    graphics.FillRectangle(hb, new Rectangle(50 + nn * ____WIDTH, 
                  40 + mm * ____HEIGHT, 
                  ____WIDTH-1, ____HEIGHT-1));
#endif   
}
else
{
#if false
    Brush brush = new SolidBrush(realBackColor[ ____t_tris[mm, nn] ]);
    graphics.FillRectangle(brush, 
                new Rectangle(50 + nn * ____WIDTH, 
                  40 + mm * ____HEIGHT, 
                  ____WIDTH-1, ____HEIGHT-1));
#endif   
  
#if true
    HatchStyle hs = (HatchStyle)____hatch_style;
    Brush hb = new HatchBrush(hs, realBackColor[ ____t_tris[mm, nn] ]);
    graphics.FillRectangle(hb, new Rectangle(50 + nn * ____WIDTH, 
                  40 + mm * ____HEIGHT, 
                  ____WIDTH-1, ____HEIGHT-1));
#endif   
}

 

#File Attach

f33.cs
0.04MB

Graphics graphics = CreateGraphics();
Graphics graphics = CreateGraphics();
Graphics graphics = CreateGraphics(); ????? 알아보도록 하자.

선 및 도형을 그리거나, 텍스트를 렌더링 하거나, GDI +를 사용 하 여 이미지를 표시 하 고 조작 하려면 먼저 Graphics 개체를 만들어야 합니다. Graphics개체는 GDI + 그리기 화면을 나타내며 그래픽 이미지를 만드는 데 사용 되는 개체입니다.

그래픽 작업에는 두 가지 단계가 있습니다.

  1. 개체 만들기 Graphics
  2. 개체를 사용 하 여 Graphics 선과 도형을 그리거나, 텍스트를 렌더링 하거나, 이미지를 표시 하 고 조작 합니다.

그래픽 개체 만들기

그래픽 개체는 다양 한 방법으로 만들 수 있습니다.

그래픽 개체를 만들려면

  • PaintEventArgs폼 또는 컨트롤의 경우의 일부로 그래픽 개체에 대 한 참조를 받습니다 Paint . 일반적으로 컨트롤의 그리기 코드를 만들 때 그래픽 개체에 대 한 참조를 가져오는 방법입니다. 마찬가지로, PrintPageEventArgs PrintPage 에 대 한 이벤트를 처리할 때 그래픽 개체를의 속성으로 가져올 수도 있습니다 PrintDocument .
  • 또는
  • 컨트롤이 나 폼의 메서드를 호출 하 여 CreateGraphics Graphics 해당 컨트롤이 나 폼의 그리기 화면을 나타내는 개체에 대 한 참조를 가져옵니다. 이미 존재 하는 폼 이나 컨트롤에 그리려는 경우이 메서드를 사용 합니다.
  • 또는
  • Graphics에서 상속 되는 개체에서 개체를 만듭니다 Image . 이 방법은 이미 존재 하는 이미지를 변경 하려는 경우에 유용 합니다.
  • 다음 섹션에서는 이러한 각 프로세스에 대 한 세부 정보를 제공 합니다.

Paint 이벤트 처리기의 PaintEventArgs

컨트롤 또는의에 대 한를 프로그래밍할 때 PaintEventHandler PrintPage PrintDocument 그래픽 개체는 또는의 속성 중 하나로 제공 됩니다 PaintEventArgs PrintPageEventArgs .

Paint 이벤트의 PaintEventArgs에서 그래픽 개체에 대 한 참조를 가져오려면

  1. 개체를 선언 Graphics 합니다.
  2. 의 일부로 전달 된 개체를 참조 하는 변수를 할당 합니다 Graphics PaintEventArgs .
  3. 폼 이나 컨트롤을 그리는 코드를 삽입 합니다.C#복사
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs pe) { // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics g = pe.Graphics; // Insert code to paint the form here. }
  4. 다음 예제에서는 이벤트의에서 개체를 참조 하는 방법을 보여 줍니다 Graphics PaintEventArgs Paint .

CreateGraphics 메서드

CreateGraphics컨트롤이 나 폼의 메서드를 사용 하 여 Graphics 해당 컨트롤이 나 폼의 그리기 화면을 나타내는 개체에 대 한 참조를 가져올 수도 있습니다.

CreateGraphics 메서드를 사용 하 여 그래픽 개체를 만들려면

  • CreateGraphics그래픽을 렌더링 하려는 폼 이나 컨트롤의 메서드를 호출 합니다.Graphics g; // Sets g to a graphics object representing the drawing surface of the // control or form g is a member of. g = this.CreateGraphics();
  • C#복사

이미지 개체에서 만들기

또한 클래스에서 파생 되는 모든 개체에서 그래픽 개체를 만들 수 있습니다 Image .

이미지에서 그래픽 개체를 만들려면

  • 개체를 Graphics.FromImage 만들려는 이미지 변수의 이름을 제공 하 여 메서드를 호출 합니다 Graphics .C#복사
    Bitmap myBitmap = new Bitmap(@"C:\Documents and Settings\Joe\Pics\myPic.bmp"); Graphics g = Graphics.FromImage(myBitmap);
  • 다음 예제에서는 개체를 사용 하는 방법을 보여 줍니다 Bitmap .

 참고

Graphics16 비트, 24 비트 및 32 비트 .bmp 파일과 같은 인덱싱되지 않은 .bmp 파일의 개체만 만들 수 있습니다. 비인덱스 .bmp 파일의 각 픽셀은 색 테이블에 대 한 인덱스를 포함 하는 인덱싱된 .bmp 파일의 픽셀과 달리 색을 포함 합니다.

모양 및 이미지 그리기 및 조작

개체를 만든 후에 Graphics 는 개체를 사용 하 여 선과 셰이프를 그리거나, 텍스트를 렌더링 하거나, 이미지를 표시 하 고 조작할 수 있습니다. 개체와 함께 사용 되는 보안 주체 개체는 Graphics 다음과 같습니다.

  • Pen클래스-선 그리기, 모양 개요 또는 다른 기하학적 표현 렌더링에 사용 됩니다.
  • Brush클래스-채워진 도형, 이미지 또는 텍스트와 같은 그래픽 영역을 채우는 데 사용 됩니다.
  • Font클래스-텍스트를 렌더링할 때 사용할 도형에 대 한 설명을 제공 합니다.
  • Color구조는 표시할 여러 색을 나타냅니다.

만든 그래픽 개체를 사용 하려면

C# 콘솔프로그램에서 콘솔창 숨기기
C# 콘솔프로그램에서 콘솔창 숨기기
C# 콘솔프로그램에서 콘솔창 숨기기

C# 콘솔프로그램에서 실행되는 콘솔창을 숨기기 위한 방법이다.

class안에 아래와 같이 선언한다.
[DllImport(“kernel32.dll”)]
static extern IntPtr GetConsoleWindow();

[DllImport(“user32.dll”)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

const int SW_HIDE = 0; // 숨기기
const int SW_SHOW = 1; // 보이기

2.  main 함수 안에 아래의 코드를 입력한다.

var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE); // 숨기기
ShowWindow(handle, SW_SHOW); // 보이기

3. 실행

요약 
모든 데이터를 오브젝트(object;물체)로 취급하여 프로그래밍 하는 방법으로, 처리 요구를 받은 객체가 자기 자신의 안에 있는 내용을 가지고 처리하는 방식이다.


이 개념은 1960년 중엽에 유행한 시뮬레이션 언어의 SIMURA에서 유래한 것이다. 모든 데이터를 오브젝트(object:물체)로 취급하며, 이 오브젝트에는 클래스(class:類)의 개념이 있어서 상위(上位)와 하위(下位)의 관계가 있다. 클래스의 구체적인 예가 인스턴스(instance)이다. 오브젝트 사이는 메시지의 송신(送信)으로 상호 통신한다. 가장 특징적인 것은 각 클래스에 그 메시지를 처리하기 위한 방식이 있다는 것이다. 어떤 인스턴스에 메시지가 도래하면 그 상위 클래스가 그것을 처리한다. 현재 오브젝트지향개념은 프레임 표현형식과 융합하여 인공지능을 위한 소프트웨어 기법(技法)의 하나로 되어 있다.

객체지향프로그램은 C, Pascal, BASIC 등과 같은 절차형 언어(procedure-oriented programming)가 크고 복잡한 프로그램을 구축하기 어렵다는 문제점을 해결하기 위해 탄생된 것이다. 절차형 언어에서는 코드 전체를 여러 개의 기능부분 즉, 인쇄하는 기능부분과 유저로부터의 입력을 받는 기능부분 등으로 분할하는데, 이와 같이 각 기능부분을 구성하는 코드를 모쥴이라고 한다. 절차형 언어에서는 프로그램을 여러 기능으로 나누고 이들 모쥴을 편성하여 프로그램을 작성할 경우, 각 모쥴이 처리하는 데이터에 대해서는 전혀 고려하지 않는다. 다시 말하면 데이터 취급이 완전하지 않고 현실 세계의 문제를 프로그램으로서 표현하는 것이 곤란하다.

이러한 절차형 프로그래밍이 가지는 문제를 해결하기 위해 탄생된 객체지향프로그래밍은 객체라는 작은 단위로서 모든 처리를 기술하는 프로그래밍 방법으로서, 모든 처리는 객체에 대한 요구의 형태로 표현되며, 요구를 받은 객체는 자기 자신 내에 기술되어 있는 처리를 실행한다. 이 방법으로 프로그램을 작성할 경우 프로그램이 단순화되고, 생산성과 신뢰성이 높은 시스템을 구축할 수 있다.

#C# 에서의 [STAThread] 는 왜 붙이는가? (Why STAThread is attached above C# ?)

C# 코드에서 [STAThread] 가 의미하는 바는 기본적으로, VS .NET에 의해 만들어진 응용 프로그램의 Main()메소드에는 [STAThread] 라는 속성으로 되어 있다. 
하지만 COM 형식을 이용하는 경우엔 [STAThread]  라는 것으로  해당 응용 프로그램이 COM형식을 이용하는 경우에 (단지 이 경우에만 해당하는 것인데) 해당 응용 프로그램이 단일 스레드 아파트(single threaded apartment, STA) 모델로 설정되어야 한다는 것을 런타임에게 알려주는 역할을 한다. 
즉 다중쓰레드로 동작하지 않는다는 것을 알려주는것이다. 
해당 응용 프로그램에서 COM 형식을 이용하지 않는다면, [STAThread] 어트리뷰트는 무시되기 때문에 삭제해도 무방하다.

+ Recent posts