[c#] Windows GUI : WPF 또는 WinRT (2015+)

Windows World에서 GUI를 구축 할 때 사용할 다양한 기술에 대한 개요를 얻으려고합니다.

맥락을 위해 저는 2D 플랫폼 멀티 플레이어 게임을 만들고 있습니다. (단지 학습 목적으로 ..)

선생님은 WPF가 올바른 방법이라고 생각하지만 Windows Forms와 비교하는 것 같습니다.

내 이해는 여기 2015 년에 Windows Forms가 완전히 죽었다는 것입니다.

이 다른 스택 오버 질문에서 그들은 WinRT + XAML이 Metro GUI 구축 (윈도우 8 타일 같은 것!)을위한 것이며 WPF는 윈도우 7/8에서 데스크톱에만 사용되는 것으로 보이며 Silverlight와 밀접한 관련이있는 것 같습니다.

Windows 8 런타임 (WinRT / Windows Store 앱 / Windows 10 Universal App)은 Silverlight 및 WPF와 어떻게 다릅니 까?

  • 데스크톱은 이전 앱이있는 곳입니다 (빨간색. WFP).
  • 새로운 종류의 응용 프로그램 인 Metro 응용 프로그램은 VB.NET, C # 또는 C ++를 포함하여 다양한 방법으로 구축 할 수 있습니다. 이 세 가지 언어 옵션은 UI를 빌드하는 데 XAML을 사용할 수 있습니다. 대안은 UI 및 애플리케이션 코드 개발을 위해 JavaScript / HTML5 / CSS를 사용하는 것입니다.

내 진짜 질문은 : Window World에서 GUI를 구축하는 좋은 방법이 없습니까?

그렇지 않다면 Window 7, Window 8 (Desktop and Metro), Window Phone, (그리고 Windows 10!), 심지어 x-box에서 어떤 기술을 사용해야하는지 ..

이런 방식으로 비교되는 것은 다른 기술과 관련이 있습니까?

시간을 투자하는 것이 옳다고 생각하십니까?



답변

여기에 많은 것이 있지만 여기에 있습니다.

  • Windows Forms (Winforms)가 죽었 습니까? 아니요. 여전히 적극적으로 지원됩니다. 즉, 작업하기에 끔찍한 기술입니다 (적어도 WPF의 마법을 알고 있다면 )
  • 멋지고 잘 디자인 된 데스크톱 (Metro가 아닌 클래식) 앱 을 빌드하려는 경우 WPF가 순수한 .NET 용어로 답할 수 있습니다. 당신 은 할있습니다 (예 : 자신의 소켓 클래스로) WinRT API를 사용하지만 윈도우 8 UI는 여전히 WPF 전에 당신의 OS에서 실행할 수 없습니다.
  • WinRT 앱은 Windows 8 Store 용입니다 (Windows 10 Store에서도 사용 가능). 여기에서는 WPF를 사용하거나 데스크톱에서 WinRT를 사용할 수 없으므로 배포 위치에 따라 사용할 항목이 결정됩니다. 사용 가능한 언어 / 기술에 대한 이해가 정확합니다.
  • Windows Phone 8 (현재 사용되지 않음)은 WinRT의 수정 된 런타임을 사용합니다 (Windows 10에서 변경됨). Win8 / WP8의 경우 “범용”앱을 사용 하여 표준 WinRT 앱과 Windows Phone 앱간에 대부분 의 코드 를 공유 할 수 있습니다 .
  • Windows 10은 .NET Core를 기반으로하는 UWP (유니버설 Windows 플랫폼)를 사용합니다. Windows 10 용으로 개발 된 코드는 Xbox One, Windows Phone 10 및 HoloLens에서도 사용할 수 있습니다. WPF는 여전히 “표준”데스크톱 앱용입니다.
  • XBox는 까다 롭습니다. XNA는 사라졌고 Microsoft는 플랫폼을위한 커뮤니티 제작 콘텐츠에서 벗어나는 것 같습니다. 즉, Unity3D는 XBox에 배포 할 수 있으며 표준 DirectX (C ++) 개발이 적합하다고 생각합니다. 유니버설 Windows 플랫폼 앱도 Xbox One에 배포 할 수 있으며 이는 향후 Microsoft의 전략으로 보입니다.

무엇에 시간을 투자할지에 관해서는 목표 대상에 따라 다릅니다. :). WPF / UWP + XAML을 배우면 .NET GUI 개발에서 “최신 상태”를 유지하려는 경우 많은 이점을 얻을 수 있습니다. WPF에는 가장 많은 기능이 있으므로 여기에서 시작하여 UWP (또는 기타 XAML 기반 기술)에서 누락 된 항목에 대한 해결 방법을 찾아야합니다.

그렇게한다면 MVVM (Model-View-View Model) 패턴을 배워야합니다. 그것은 작동 정말 XAML 기반 기술과 잘, 당신이 당신의 WPF와 UWP 응용 프로그램간에 많은 로직을 공유 할 수 있습니다. 결국 iOS / Android 용 Xamarin 애플리케이션을 개발하는 경우에도 동일한 논리를 사용할 수 있습니다.

에 대한주의 진실 게임 개발, 당신이 원하는거야 실제 (Unity3D 또는 XNA 같은) 게임 프레임 워크를. WPF에서 할 수 있으며 Winforms보다 나은 선택이지만 실제로 게임을위한 것은 아닙니다.


답변

꽤 오래된 스레드이지만 Google을 통해이 문제를 겪은 것처럼 (관심없이) 다른 사람도 여기에 도달 할 수 있습니다. 이것은 새로운 프로그래머가 계속해서 묻는 질문입니다. 따라서 Windows 10이 공식적으로 출시되었으므로 몇 가지 답변하고 싶습니다.

첫째, 더 이상 Windows Forms로 시작해서는 안됩니다. 현재로서는 가장 성숙한 기술이지만 Windows Forms는 더 이상 개발되지 않을 것이며 현재 유지 관리 단계에 있습니다. WPF는 활발하게 개발되고 있습니다 (마지막으로 읽었습니다). 그러나 이제 Windows Universal Apps (WinRT 앱)는 더 이상 전체 화면에서 사용할 필요가 없으며 다른 데스크톱 앱 (WPF 및 WinForms)과 마찬가지로 창 모드에서 사용할 수 있습니다. 이것은 태블릿이 아닌 컴퓨터에서 사용성을 크게 향상시킵니다. 나는 이것이 데스크톱 앱의 미래도 될 것이라고 믿습니다. 하지만 WPF 소프트웨어는 기존 데스크톱 앱입니다 (권한이없고 UAC 만 있음). 어느 쪽이든 WPF 또는 WinRT (.Net 사용) 개발을 배우 든 관계없이 둘 다 배우게됩니다. 둘 다 XAML + C # (또는 다른 .Net 언어)입니다. WinRT가 Windows 8과 함께 나왔을 때 WPF를 배우고있었습니다. 나는 집에서 옳다고 느꼈고 곧 익숙해지는 사소한 변화가 거의 없었습니다. WinRT의 MVVM 시나리오 (데이터 바인딩)에 대해서는 확실하지 않습니다. 나는 여전히 WPF의 측면을 직접 배우고 있습니다.

Window 10이 방금 시작되었습니다. Windows 8 / 8.1은 Windows 7만큼 큰 성공을 거두지 못했습니다. 따라서 더 많은 사용자를 대상으로하는 앱을 빌드하려면 당분간 WPF를 사용해야합니다. 그러나 가까운 장래에 WinRT가 갈 길이 될 것입니다.

귀하의 질문에 ” Windows 7 에서 사용해야하는 기술 , Window 8 (Desktop 및 Metro), Window Phone, (그리고 Windows 10!), 심지어 x-box 대한 답은 Windows Universal Apps입니다. 이것이 바로이 프레임 워크가 개발 된 이유입니다. 모든 장치 용 앱을 개발하는 데 사용되는 하나의 기술입니다. 데스크톱, 태블릿, 휴대폰 (Visual Studio 2015와 함께 번들로 제공되는 Xamarin을 사용하는 Android 포함), Xbox 및 IoT (사물 인터넷).


답변

귀하의 질문 중 하나에 만 답변 해 드리겠습니다.

Windows Forms가 완전히 죽었습니까?

아니요, Windows Forms 기술은 죽지 않았습니다. 이유를 말씀 드리겠습니다. WPF 및 XAML은 매우 포괄적이고 복잡한 기술이며 매우 멋진 UI를 구축 할 수 있습니다. 그러나! 이 기술에는 깊은 지식이 필요합니다. 기본 레이아웃의 경우 그다지 많은 지식이 필요하지 않지만 일부 고급 레이아웃의 경우 깊은 지식이 있어야하며이 기술을 시작했을 때 Google에서 몇 가지 팁을 검색하는 데 많은 시간을 보냈습니다. 따라서 사용자 입력을 위해 간단한 Forms가 필요할 때 항상 매우 간단하고 간단한 Windows Forms 기술을 선택합니다. 이것이이 기술이 세계에 올 때 매우 성공적이었던 이유이기도합니다. WPF로 시작할 때 MVVM 디자인 패턴이 무엇인지 알아야하며 경험이없는 일부 프로그래머는이를 혼동합니다.


답변

지금은 2016 년 4 월이며 아직 명확한 답이 없습니다. 우리는 텍스트 및 기타 다양한 그래픽과 혼합 된 여러 차트 및 디스플레이를 렌더링해야하는 매우 현대적인 실시간 성능 모니터링 데스크톱 애플리케이션을 개발하고 있습니다. 우리의 응용 프로그램은 .NET Framework 4.5.2를 사용하는 C #, WPF이지만 허용 가능한 성능을 얻기 위해 여전히 WinForms 및 GDI +를 사용하여 일부 구성 요소를 작성하고 있습니다. 우리는 WPF로 그것을 달성하지 못했습니다. DirectX를 사용하여 응용 프로그램에서 몇 개의 디스플레이를 개발했지만 이로 인해 팀 중 소수만이 지원할 수있는 많은 복잡성이 추가됩니다. WPF 내에서 WinForms 디스플레이를 호스팅하여 얻을 수있는 단순성과 순수한 속도와 GDI +의 속도는 다양한 공역 문제와 함께 순수한 View / ViewModel 구조의 값 비싼 비용으로 필요한 것을 제공합니다. 우리의 응용 프로그램은 매우 전문적이며 WinForms를 완전히 제거하고 싶지만 불행히도 우리의 경우 아직 가능하지 않습니다. 순수한 성능을 위해서는 DirectX 또는 WinForms를 사용해야합니다.


답변

내 두 센트 … 진정한 범용 앱, 즉 Windows를 포함한 모든 데스크톱 운영 체제에서 실행할 수있는 프로그램을 원한다면 WinForms가 여전히 갈 길입니다. CLR 호환성을 유지하고 Mono를 통해 Mac 및 Linux에 배포 할 수 있는지 확인하십시오. 엄청난 혜택입니다. XAML은 멋질 수 있지만 다른 운영 체제로 이식되지는 않습니다.

개인적으로 샌드 박스 화 된 (빠른?) UWP 비즈니스 모델이 끔찍하다고 생각합니다. Windows가 처음부터 지켜온 개방성에 대응합니다.


답변

저는 10 년 이상 Microsoft 기술로 작업 해 왔습니다. 내가 배운 가장 중요한 것은 마이크로 소프트가 제공하는 것에 귀를 기울이는 것이 아닙니다. 마이크로 소프트가 이것이 미래 라고 말하면 잘못 될 확률은 50 %입니다. Microsoft는 그들이 투자 한 제품을 홍보하기 위해 최선을 다할 것이지만 그렇다고해서 반드시 따라야한다는 의미는 아닙니다. WCF 및 Silverlight는 어떻게되는지 확인하십시오.

WPF는 배우기에 매우 좋은 플랫폼이지만 학습 곡선이 큽니다. 프로그래밍 경험이 5 년 미만인 개발자는 WPF를 제대로 수행 할 수 없다고 생각합니다.

MVVM 패턴을 따르면 WinForm에서 비교적 쉬운 작업을 수행하는 것이 WPF에서 매우 어려울 수 있음을 알 수 있습니다. 업데이트 후 일부 조건에 따라 셀에 색상을 지정하거나 뷰에서 행을 스크롤하여 강조 표시합니다.

물론 MVVM을 할 필요가 없다고 말할 수 있습니다. 코드 뒤에 코드를 넣고 작동하게 만드십시오. 예, 작동하지만 WPF 사용의 요점은 무엇입니까? 왜 Win Form을 사용하지 않습니까?


답변

이것은 오래된 스레드이지만 .NET 프레임 워크의 현재 진행 상황, C # 기능 및 게임 개발 선택으로 C #에 대한 관심이 증가함에 따라 중요한 스레드입니다.

WPF는 정직하게 AC # 게임 플랫폼으로 선택되지 않았습니다. WPF 공역 문제는 사람들을 아주 빨리 겁 먹게했습니다. 이 때문에 많은 주요 타이틀이나 메인 스트림 게임 엔진이 WPF를 대상 플랫폼으로 지원한다고 생각하지 않습니다. WPF는 게임 런처를위한 훌륭한 플랫폼을 제공합니다!

현재 유지 관리 모드에있는 WinForms는 앞으로도 여전히 유효한 선택이 될 것입니다. 오랜 시간 동안 테스트되고 안정적입니다. 제가 본 바에 따르면 2017 년에도 WinForms는 여전히 C # 기반 게임 개발을 위해 선택된 가장 일반적인 플랫폼입니다.

보고 스팀 하드웨어 조사 자료 를 이 답변을 작성하는 시점 (2017 년 7 월)에 Windows 10 64 비트가 현재 50 %의 시장 점유율로 PC 게임 플랫폼을 지배하고 있으며 Windows 7 64 비트가 32 %라는 것을 알 수 있습니다. Windows 8.1 64 비트는 거의 7 %입니다. 다른 모든 OS 플랫폼 시장 점유율은 너무 작아서이 세 가지 이외의 것을 고려할 가치가 거의 없습니다.

이것이 현재 PC 게임 상태이기 때문에 WinForms는 3 개의 상위 PC 플랫폼을 모두 대상으로하는 가장 일반적인 분모입니다. 미래를 내다 보면 UWP는 Windows 7 및 8을 대체하는 새로운 플랫폼이 제공되지 않는 한 Windows 7 및 8이 Windows 10에 대한 상당한 시장 점유율을 잃기 때문에 C # 게임 개발을위한 최고의 대상 플랫폼이 될 것입니다. 그래서 그것은 단지 숫자입니다.

최대 시장 점유율을 지원하는 대신 OS 플랫폼 당 최고 수준의 호환성을 기반으로 선택하는 경우 선택 사항은 다음과 같습니다.

  • Windows 10 : UWP
  • Windows 8.1 : WinRT 또는 Windows Store
  • Windows 7 : WinForms

대부분의 다른 답변은 표준 Windows 응용 프로그램 개발을 중심으로하지만 게임 개발은 매우 다른 영역이며 대상 OS 및 선택한 그래픽 API 또는 게임 엔진이 실제로 가장 잘 지원하는 것과 같은 다양한 요소가 선택에 영향을 미칩니다.