2009-09-01 3 views
5

C#에서 Windows Form 응용 프로그램을 가지고 있는데 main()에서 루프 while 루프와 동등한 CLI 응용 프로그램을 구현할 위치를 파악하려고합니다. 저는 Visual C#의 GUI 디자이너를 사용하고 있습니다.Windows GUI 메인 루프 C#에서는 ... 어디 있습니까?

편집 : Timer 인스턴스로 문제가 해결되었습니다.

+3

나는 당신이 틀린 수준에서 이것을 생각하고 있다고 생각합니다. 또한 "C# 프로그램의 어느 부분에서"일부 폴리곤에 대한 데이터가 일부 버스를 통해 GPU로 이동되는지 묻는 것이 좋습니다. 이러한 아이디어는 C# 언어의 개념이 아니라 라이브러리, 언어 및 런타임 추상화와 같은 구현 세부 사항입니다. C#의 Windows 폼의 요점은 메시지 루프에 대해 다시 생각할 필요가 없다는 것입니다. 예, 이벤트 중심 프로그램은 Windows 메시지로 만들어집니다. 간혹 추상화가 누출되지만 대부분의 일반적인 경우 메시지 수준에서 직접 이야기 할 필요는 없습니다. –

+0

@Orm : 당신이 링크 한 예제는 매우 잘못 작성된 코드입니다. 당신이 그것을 사용한다면, 나는 그것을 피해야 할 것에 대한 참고 자료로 사용할 것을 권합니다. –

+0

나는 그렇다. 그리고 이것은 이것을하는 쓰레기 방법이다. 나는 노력했고, 전혀 작동하지 않았다. – Orm

답변

13

Application.Run 방법 안에 있습니다.

// MyForm is derived from `System.Windows.Forms.Form` class 
Application.Run(new MyForm()); 
+0

GetMessage API 정보가 어디서 들어 왔는지 확실하지 않습니다 ... –

+0

sheepsimulator : 무엇을 의미합니까? Application.Run은 메시지 루프를 설정합니다. 내부적으로, 그것은 루프에서'GetMessage' Win32 API 함수를 호출합니다. –

+0

하지만 어떻게 프로그램 로직을 추가 할 수 있습니까? 예를 들어, 프로그램이 계속해서 "It works!" 위젯으로 (텍스트를 추가하면 알아 낸 것입니다. widget.Text + = "It works!";). – Orm

4

그것은 Application.Run(Form)에서 입력 : 당신이 직접 GetMessage API 함수를 호출하지 않아야합니다. 그 루프에 어떤 논리도 입력하지 마십시오. 입력에 응답해야하는 경우 특정 이벤트에 대한 이벤트 처리기를 양식의 컨트롤에 추가하십시오. 논리를 주기적으로 실행해야하는 경우 Timer 클래스 중 하나를 사용하십시오.

C++의 메시지 펌프 논리의 주요 결과는 랩톱에서 배터리를 과도하게/불필요하게 사용하는 것입니다. 목표 목표를 달성하기위한 실제 코드 요구 사항을 다시 생각해 봐야하며 스핀 루프에 지속적으로 실행되는 로직을 포함하지 않아야합니다.

+0

좋아요, 조금 도와 줘요.하지만 이제는 내 프로그램 논리를 루프에 추가하는 방법을 알아야합니다. 그것이 내가 알아 내려고하는 것입니다. – Orm

+0

그렇지 않습니다. 프로그램의 논리를 이벤트 핸들러에 추가합니다. – Eclipse

0

this을 읽어보십시오. 언어는 너무 명확하지 않으며 코드는 VB이지만 포인트를 얻어야합니다.