programing

새 GUI를 만들 때 WPF가 Windows Forms보다 선호됩니까?

newsource 2023. 6. 4. 10:35

새 GUI를 만들 때 WPF가 Windows Forms보다 선호됩니까?

대부분의 프로그래머는 Windows 양식에 대한 제한 사항과 트릭을 공통적으로 사용합니다.그러나 .NET 3.0부터는 WPF인 윈도우즈 프레젠테이션 파운데이션도 사용할 수 있습니다..NET 3.5 SP1을 사용하면 "sexy 애플리케이션"을 더 쉽게 만들 수 있으며 실행 속도가 크게 향상되었다고 합니다.

하지만 다른 한편으로는 WPF와 많은 것들이 다르게 작동하고 있습니다.저는 그것이 더 어렵다고 말하지 않을 것이지만 여러분은 "모든 것"을 처음부터 배워야 합니다.

내 질문:새로운 GUI를 생성해야 하고 프로젝트에 대한 시간 부담이 없을 때 이 추가 시간을 할애할 가치가 있습니까?

WPF에서 LOB(Line-of-Business) 애플리케이션을 구축하기 위해 3개월간 노력한 끝에 프로젝트를 위해 Windows Forms로 돌아갈 것을 고려하는 시점에 도달했고, 다른 사람들의 의견을 조사하는 과정에서 이 스레드를 발견했습니다.

네, WPF는 훌륭한 기술이고 단순한 눈요기 이상의 이점을 가지고 있습니다...템플릿 및 바인딩 기능이 좋은 예입니다.전체 객체 모델은 더 많은 유연성과 더 넓은 가능성을 제공합니다.하지만 그렇다고 해서 미래의 LOB 애플리케이션을 위한 사실상의 플랫폼이 되는 것은 아닙니다.

WPF가 GUI와 비즈니스 로직을 분리하는 측면에서 해결하는 "문제"는 단순히 올바른 아키텍처와 마인드셋으로 시작하여 Windows Forms에서 쉽게 해결할 수 없는 문제가 아닙니다.WPF의 개체 경로 바인딩 기능도 매우 간단한 도우미 클래스를 사용하여 Windows Forms에서 복제할 수 있습니다.WPF의 데이터 템플릿 기능은 매우 훌륭하지만 화면의 특정 부분에서 어떤 개체를 나타낼지 전혀 모르는 드문 경우에도 Windows Forms에서 시뮬레이션할 수 없는 기능입니다.

Windows Forms의 경쟁력은 성숙도 측면에서 앞서 있습니다.반면 WPF는 상대적으로 사용 가능한 학습 리소스와 사용자 지정 제어 기능이 적고 치아 문제가 해결되지 않은 블로그를 방문하지 않고는 Google에서 죽은 고양이를 휘두를 수 없습니다.

WPF 대 Windows Forms 결정의 정점은 개발 환경의 성숙도입니다.Windows Forms 편집기는 매끄럽고 반응성이 뛰어나며 직관적입니다.오류에 대한 피드백은 즉시 제공되며 솔루션은 일반적으로 명확하며 Windows Forms의 컴파일->디버그->편집 주기는 매우 빠릅니다.

반면에 WPF 애플리케이션은 설계 뷰가 오류가 발생할 때마다 너무 쉽게 꺼질 수 있으므로 설계자가 다시 시작하기 전에 수정 후 프로젝트를 빌드해야 하는 경우가 많습니다.도구 상자에서 구성 요소를 끌어서 놓기는 전혀 작동하지 않거나 전혀 직관적이지 않은 결과를 생성하는 광범위한 상황을 고려할 때 지원되지 않는 것이 좋습니다.WpfToolkit의 가능성에도 불구하고, WPF에 사용할 수 있는 DataGrid는 아직 존재하지 않습니다. 성능이나 설계 시간에 대한 친숙성을 제공합니다.

WPF 애플리케이션 디버깅은 이전 ASP.NET 디버깅 패러다임과 약간 유사합니다.hit -> wait -> launch -> error -> stop -> fix -> hit -> wait -> launch -> error -> 신음 -> stop -> fix -> hit..프로그램이 실행 중인 모든 XAML이 잠겨 있고 XAML 특정 문제를 추적하는 것은 종종 지루합니다.

간단히 말해서, Windows Forms용 개발 툴을 사용하면 WPF 애플리케이션의 몇 분의 일 안에 프런트 엔드의 성능을 향상시킬 수 있습니다.특히 대부분의 LOB가 가지고 있는 인터페이스와 같은 마스터 세부 그리드나 스프레드시트를 만드는 경우에는 더욱 그렇습니다.Windows Forms를 사용하면 작업의 90%를 이미 완료한 상태에서 시작할 수 있습니다.

저는 WPF 아키텍처의 열렬한 팬입니다.저는 디자인 타임 툴 세트가 알파 디버그 빌드 전처럼 느껴지지 않았으면 합니다.


편집: 이 답변은 .NET 3.5 + Visual Studio 2008에 대해 게시되었지만 Visual Studio 2010이 포함된 .NET 4.0에는 WPF 데이터 그리드가 함께 제공됩니다.새로운 WPF 개발 경험에 많은 개선이 이루어졌지만, 저의 답변은 변함이 없으며, 다음과 같은 제안을 추가하고자 합니다.

RAD 개발이 급하다면 Windows Forms를 사용하십시오.잘 설계되고, 유지보수가 가능하며, 확장 가능하며, 리소스 친화적인 다중 사용자 LOB(Line-Of-Business) 애플리케이션을 개발하려는 경우 ASP.NET MVC + HTML 5 + jQuery...MVC는 WPF와 동일한 템플릿 기능을 제공하며 jQuery는 애니메이션과 복잡한 상호 작용을 지원합니다.더 중요한 것은 ASP.NET MVC + jQuery 솔루션이 최종 사용자에게 적절한 그래픽 하드웨어를 갖춘 최신 데스크톱을 요구하지 않는다는 점입니다.

저는 고객의 핵심 시스템이 된 WPF를 사용한지 7개월이 되었습니다. WPF를 비즈니스 프레젠테이션 플랫폼으로 학습하고 사용한 경험에 대해 몇 가지 더 많은 생각을 나누고 싶습니다.

일반적으로 위에서 언급한 내용들은 여전히 유효합니다.WPF에 대한 설계 시간 지원은 아직 오지 않았습니다.리치 클라이언트 응용프로그램이 필요한 경우 Windows Forms를 사용하십시오.마침표.Microsoft는 GDI/Windows Forms 플랫폼의 중단을 서두르지 않기 때문에 미래의 적절한 지원을 기대할 수 있습니다.

WPF를 마스터하는 것은 쉽지 않지만, WPF 학습에 시간과 에너지를 투자해야 하는지에 대한 설명을 여기에 남겨서는 안 됩니다.WPF는 현재 성숙도가 부족함에도 불구하고 몇 가지 유용하고 현대적인 개념을 기반으로 구축되었습니다.

예를 들어, WPF에서 타당한 검증 논리를 가진 잘 작성된 비즈니스 객체에 대한 투자는 확실한 투자입니다.Windows Forms와 달리 WPF의 데이터 바인딩에는 잘못된 사용자 입력에 인터페이스 제어가 대응하여 오류를 탐지하는 GUI 코드를 작성하지 않아도 됩니다.이것은 가치가 있습니다.

WPF의 스타일링 및 템플릿 기능도 가치가 있는 것으로 입증되었습니다.스타일링과 템플릿을 위한 유일한 용도는 화면에 아이캔디를 만드는 것이라는 일반적인 오해에도 불구하고, 이러한 기능은 기본 비즈니스 논리 계층의 상태를 기반으로 비활성화/활성화하는 버튼과 같은 풍부한 피드백을 제공하는 사용자 인터페이스의 코딩을 상당히 단순화합니다.또는 커서 아래에 있는 개체의 상태 등을 기반으로 지능적으로 텍스트를 찾는 툴팁입니다.

이러한 모든 기능은 단순히 인터페이스를 기본 데이터와 일관되게 유지하는 것을 쉽게 하기 때문에 "멋진" 비즈니스 애플리케이션에 매우 유용한 기능을 제공합니다.

간단히 말해서,

  • Windows Forms에서 사용자 인터페이스를 설계한 다음 해당 사용자 인터페이스를 구동하는 코드를 작성합니다. 일반적으로 데이터 개체를 구동하는 코드도 포함됩니다.
  • WPF에서는 데이터 개체를 구동하는 비즈니스 계층에 투자한 다음 데이터 개체를 수신하는 인터페이스를 설계합니다.

겉보기에는 미묘한 차이지만 코드를 재사용하는 능력에 큰 차이가 있습니다."Windows Forms 대 WPF 질문은 실제로 투자 결정입니까?"라는 질문이 시작됩니다.

(이것이 제가 가장 좋아하는 스레드가 된 것 같습니다.)

WPF를 사용해야 하는 강력한 이유가 있습니까?

물론이죠! WPF는 정말 놀랍습니다!Windows Forms에는 부족한 기능과 기능이 너무 많기 때문에 거의 모든 프로젝트에 큰 이점이 될 것입니다.

비즈니스 애플리케이션의 가장 큰 이점은 다음과 같습니다.

  • 환상적인 데이터 바인딩과 템플릿은 가장 큰 차이를 만듭니다.적절한 데이터 모델을 배치한 후에는 몇 번의 클릭만으로 데이터 템플릿을 만들고 Expression Blend를 사용하여 드래그 앤 드롭을 사용하여 개체의 모양을 정확하게 구성할 수 있습니다.그리고 색이나 모양과 같은 것들과 결합하는 것은 사소한 것입니다.
  • 화면 레이아웃은 놀라울 정도로 유연합니다.WPF의 모든 것이 용기 크기와 모양 변화에 원활하게 적응할 수 있을 뿐만 아니라, 항목을 작게 확대하고 회전할 수 있으며, 심지어는 용기 프레임 외부로 확장할 수도 있습니다.
  • 일반 개체는 원하는 방식으로 표시할 수 있으며, 서로 다른 화면에서 쉽게 다른 프레젠테이션을 가질 수 있으며, 프레젠테이션을 공유할 수 있으며, 데이터 값의 변화에 따라 프레젠테이션을 조정할 수 있습니다.
  • 인쇄가 필요한 경우 프린터로 렌더링하는 것은 중요하지 않습니다.WPF를 올바르게 구성하면 Crystal Reports 또는 SQL Server Reporting Services(SSRS)가 어린이 장난감처럼 보입니다.
  • 사용자 인터페이스는 마우스를 위에 놓으면 애니메이션으로 표시되는 단추와 같은 멋진 기능을 포함하여 훨씬 더 역동적으로 보이고 느껴집니다.

유틸리티 및 게임의 경우 다음과 같은 다른 이점이 있습니다.

  • 외부 편집기를 사용하지 않고 도형, 선 및 임의 도면을 응용프로그램에 쉽게 추가할 수 있습니다.모든 구성 요소는 데이터 바인딩 및 애니메이션으로 구성되거나 코드로 제어될 수 있습니다.Windows Forms에서는 일반적으로 작업량이 많지 않은 경우 비트맵을 가져와서 그대로 사용하기만 하면 됩니다.
  • 애니메이션은 멋집니다!너무 무리하지 않는 한, 사용자들은 정말로 감명을 받을 것입니다.그것들은 또한 사람들이 무슨 일이 일어나고 있는지 보고 그를 해고할 필요성을 줄이는 것을 도울 수 있습니다.예를 들어, 개체를 끌 때 대상을 애니메이션으로 만들어 놓으면 어떤 일이 발생하는지 보여줄 수 있습니다.
  • 색상, 그라데이션 채우기, 브러시, 고급 글꼴, 객체 회전, 타일 브러시 등.그래픽으로 원하는 것은 무엇이든 원하는 대로 당신의 것입니다.
  • 믿을 수 없을 정도로 사용자 지정이 가능합니다.저는 하나의 응용 프로그램을 위해 철도 선로를 그려야 했습니다. 그래서 저는 그것들 위에 기차를 떨어뜨릴 수 있었습니다.몇 시간 후에 저는 베지에 곡선을 이용하여 스크린의 어느 곳이든 그릴 수 있는 철도 선로를 얻었고, 그것들은 자동으로 연결되고 전환되었습니다.

중요한 것은 Windows Forms에서 구축할 수 있는 상당한 크기의 GUI를 WPF에서 3분의 1(또는 그 이하)의 노력으로 구축할 수 있다는 것입니다.

WPF에는 더 많은 리소스(특히 RAM)가 필요합니까?

Windows Forms와 비교하여 가격을 지불하는 것은 사실이지만, 그것은 작은 것입니다.

  • RAM은 구현에 따라 증가하거나 감소할 수 있습니다. WPF는 데이터를 더 효율적으로 저장하여 개별 개체가 더 작아지도록 하지만 WPF에는 Windows Forms보다 더 많은 개체가 있기 때문에 균형을 맞출 수 있습니다.
  • Windows Forms에 비해 CPU가 증가합니다.제 경험에 따르면 화면에서 WPF 개체를 실제로 업데이트하는 데는 일반 Windows Forms 렌더링보다 약 2배 많은 CPU가 필요합니다.프로그램이 화면 업데이트에 대부분의 시간을 할애하는 경우 WPF가 적합하지 않을 수 있습니다.그러나 이 경우 Windows Forms도 사용하지 않을 수 있습니다. 대부분의 심각한 게임은 DirectX에 직접 기록됩니다.
  • WPF의 경우 Windows Forms보다 훨씬 적은 코드가 필요하기 때문에 디스크 사용량이 약간 적습니다.물론 데이터의 크기는 같을 것입니다.

CPU 사용에 대한 참고 사항 하나 더:애니메이션 및 변환(모션, 변환 등)은 보존 모드 스토리지로 인해 실제로 Windows Forms보다 WPF에서 더 효율적입니다.더 느린 것은 저 위에 있는 물체의 초기 획득입니다.

유지관리 오버헤드

WPF는 유지보수 측면에서 Windows Forms를 크게 능가합니다.모든 것이 이전과 같은 1/5 코드로 수행되므로 유지 관리해야 할 1/5 코드가 있습니다.게다가 모든 상용어구가 사라져서 실제로 작업을 수행하는 코드에 집중할 수 있습니다.

XAML의 이점

XAML은 WPF의 핵심입니다.WPF는 XAML 없이도 사용할 수 있지만, XAML을 사용하면 놀라울 정도로 쉽게 사용할 수 있습니다.XAML은 사용자 인터페이스를 쉽게 지정할 수 있는 HTML의 기능을 가지고 있지만, 내장된 태그가 훨씬 강력하고 사용자 자신의 태그를 쉽게 정의할 수 있습니다(사실 그렇게 하는 것이 일반적입니다).

XAML의 몇 가지 특정 이점:

  • 전체 UI는 사용자와 도구 모두에 대해 읽고 조작하기 쉬운 텍스트 파일로 정의됩니다.
  • MarkupExtensions를 사용하면 바인딩을 명확하고 간단한 방법으로 지정할 수 있습니다.
  • 유형 변환기를 사용하면 복잡한 유형의 특성을 쉽게 지정할 수 있습니다.예를 들어 Brush="Green"이라고 말하거나 정지점이 세 개인 방사형 그라데이션 브러시를 지정할 수 있습니다.
  • 고유한 요소를 생성할 수 있습니다.
  • WPF의 강력한 "연결 속성"을 쉽게 활용할 수 있습니다.

기타 통찰력

저는 수년간 WPF와 같은 것을 꿈꿨습니다.많은 사람들이 이 기능의 일부를 구현했지만, 이 모든 것을 한 곳에서 이러한 가격($0)으로 얻을 수 있다는 것은 놀라운 일입니다.

WPF는 Windows Forms에서 큰 패러다임의 변화이며 익숙해지는 데 다소 시간이 걸리겠지만, WPF를 배우는 데 소요되는 시간은 여러 배의 보상을 받을 것입니다.

WPF는 5년이 지난 지금도 몇 번의 사마귀가 있지만, 그 힘은 당신이 그것을 경험하면 당신을 완전히 날려버릴 것입니다.다른 사용자가 Windows Forms(윈도우 폼)로 다시 끌어다 놓으면 발로 차고 소리만 지르게 됩니다.

팁: - 개발을 위해 Expression Blend 복사본 받기 - XAML을 가끔 손으로 편집하기 - 처음에 이상해 보일 때 포기하지 마세요.

WPF는 당신이 놀라운 일을 할 수 있게 해줍니다. 그리고 저는 그것을 좋아합니다.하지만 개발자들이 새로운 기술로 전환해야 한다고 생각하는지 물어볼 때마다 저는 항상 제 권장 사항을 검증해야 한다고 생각합니다.

개발자들은 WPF를 효과적으로 사용하는 방법을 배우는 데 필요한 시간을 할애할 의향이 있습니까?저는 MFC, Windows Forms, 심지어 관리되지 않는 DirectX에 대해 이런 말을 할 생각은 전혀 하지 않았지만, 여러분은 아마도 팀이 배송 제품의 정상적인 개발 주기 동안 WPF를 "픽업"하는 것을 원하지 않을 것입니다!

당신의 개발자 중 적어도 한 두 명은 디자인 감성을 가지고 있고, 최종 디자인 권한을 가진 사람들은 개발 문제에 대해 어느 정도 이해하고 있습니까? 그래서 당신은 WPF 기능을 활용하여 무료 애니메이션을 특징으로 하는 더 "색채로운" 것이 아니라 실제로 더 나은 것을 만들 수 있습니까?

목표 고객층의 일부가 계획 중인 기능을 지원하지 않을 수 있는 통합 그래픽 칩셋에서 실행되고 있습니까? 아니면 고객층을 완전히 제거할 수 있는 Windows 2000을 계속 실행하고 있습니까?어떤 사람들은 고객이 실제로 향상된 시각적 효과에 관심이 있는지 묻기도 하지만, 90년대 초에 내부 회사 "우리 비즈니스 고객은 색상과 사진에 관심이 없습니다" 토론회를 통해 살아오면서, 경쟁사의 잘 설계된 솔루션이 고객을 신경 쓰게 할 것이라는 것을 알고 있습니다.그리고 진짜 문제는 그들이 지금 관심을 가질 수 있는 무언가를 제공할 수 있는 조건이 맞는지 여부입니다.

이 프로젝트에는 호환되지 않는 레거시 비계에 연결하는 추가 복잡성을 방지하기 위해 적어도 프레젠테이션 계층에 대한 기반 정비 개발이 포함됩니까(Win Forms와의 상호 운용은 원활하지 않습니다)?

당신의 매니저는 4~6개월 동안 개발자 생산성이 크게 떨어지는 것을 받아들일 수 있습니까?

이 마지막 문제는 제가 WPF의 "FizzBin" 특성이라고 생각하는 것 때문입니다. 10가지 다른 작업을 구현하는 방법이 있으며, 다른 접근 방식보다 한 가지 접근 방식을 선호할 뚜렷한 이유가 없으며, 선택에 도움이 되는 지침이 거의 없습니다.어떤 선택을 하든 그 단점은 프로젝트 후반부에만 명확해질 뿐만 아니라 프로젝트의 모든 개발자가 다른 접근 방식을 채택하도록 사실상 보장되므로 유지 관리에 큰 문제가 발생합니다.무엇보다도 가장 좌절스러운 것은 틀을 배우려고 할 때 끊임없이 발목을 잡는 모순입니다.

자세한 WPF 관련 정보는 블로그의 항목에서 확인할 수 있습니다.

http://missedmemo.com/blog/2008/09/13/WPFTheFizzBinAPI.aspx

WPF를 사용하려면 Windows Vista 또는 Windows XP SP2가 필요합니다. 이는 번거로운 요구 사항은 아니지만 관련된 요구 사항입니다.일부 사용자는 Windows 2000에서 실행하려고 하지만 WPF는 사용자에게 적합하지 않습니다.

또한 WPF는 Windows Forms만큼 입증되지 않은 최신 기술이므로 특히 대규모 응용 프로그램의 경우 Windows Forms를 덜 위험한 옵션으로 선택할 수 있습니다.

말하자면, 네, WPF는 미래입니다.Visual Studio 2010은 현재까지 가장 큰 WPF 애플리케이션이 될 것이며 기술에 대한 실제 테스트가 될 것입니다.

물론 기존 Windows Forms 응용프로그램이 올바른 선택을 하는 또 다른 상황이 될 수 있습니다.

다른 사람들이 말했듯이, 당신이 여기에 가는 길에는 장점과 단점이 있습니다.다른 사람들이 말했듯이 WPF의 장점은 다음과 같습니다.

  • 매우 풍부한 UI를 비교적 쉽게 만들 수 있는 기능.
  • 더 쉬운 애니메이션 및 특수 효과
  • 고유한 확장성(WPF 응용 프로그램 및 Windows Forms 응용 프로그램에서 Windows Vista 돋보기 도구 사용:WPF 응용 프로그램에서는 모든 벡터 아트가 아름답게 확장됩니다.)
  • (의견 경고) WPF에서 문서 지향 시스템을 수행하는 것이 "더 쉽다"고 생각합니다.

그러나 WPF에는 Windows Forms가 맨 위에 나오는 단점이 있습니다.

  • WPF의 수신함 제어 제품군은 Windows Forms보다 훨씬 더 제한적입니다.
  • 타사 제어 공간에서 Windows Forms를 더 많이 지원합니다. (물론 변화는 있지만, 생각해 보십시오. Windows Forms는 2001년부터 존재해 왔습니다. WPF는 불과 몇 년 전부터 존재해 왔습니다.)Windows Forms는 시간적 이점을 통해 커뮤니티에서 더 많은 지원을 받을 수 있습니다.)
  • 대부분의 개발자는 이미 Windows Forms를 알고 있습니다. WPF는 새로운 학습 곡선을 제공합니다.

마지막으로, 작업을 수행하거나 올바른 타사 도구를 사용하면 두 도구 모두에서 훌륭하고 매력적이며 매력적인 UI를 만들 수 있습니다.결국, 어느 쪽도 모든 상황에서 반드시 더 나은 것은 아닙니다.프로젝트에 적합하다고 생각되는 것을 사용합니다.

WPF의 프로그래밍 모델은 Windows Forms보다 더 개방적이고 유연하지만 ASP.NET MVC와 마찬가지로 Model-View-View Model 패턴을 올바르게 구현하는 측면에서 약간의 규율이 필요합니다.

WPF를 사용한 LOB 애플리케이션은 최종 사용자의 초저가 노트북을 중단시킨 리소스 독이었기 때문에 완전히 실패했습니다.WPF + LINQ를 SQL에 연결하여 좋은 결과를 기대했기 때문입니다.WPF가 Windows Forms와 크게 다른 부분입니다.Windows Forms에서는 WPF가 Windows Forms보다 리소스에 훨씬 더 많은 부담을 줍니다. 애플리케이션을 날씬하게 설계하지 않으면 800파운드의 고릴라가 됩니다.

WPF를 피하지 마세요...그것을 탐구합니다.그러나 Windows Forms 코딩의 허용 가능한 죄는 WPF에서 좋은 결과를 가져오지 않습니다.그것들은 근본적으로 다른 엔진이고, 근본적으로 다른 코딩 패턴에 스스로를 제공합니다.

마지막 말: WPF를 사용할 경우 목록 및 그리드와 함께 사용할 수 있는 데이터 가상화를 숙지하십시오.단순한 데이터 바인딩된 ListItem 또는 GridCell이란 무엇입니까? WPF에서는 논리적 + 시각적 객체 그래프가 많이 됩니다. 가상화 방법을 배우지 않으면 대규모 데이터 세트에서 애플리케이션의 성능이 저하됩니다.

WPF에는 매우 가파른 학습 곡선이 있으며, 저는 여러분이 먼저 뻔한 책(Adam Nathan, Sales/Griffith, Chris Anderson)과 블로그(Josh Smith 등)를 얻는 것을 추천합니다.준비하고 프로젝트에서 WPF를 배울 수 있는 시간을 갖도록 하십시오.

기술을 배우는 것 외에도 WPF 애플리케이션을 구성하는 데 사용되는 패턴을 배우는 데 시간을 할애합니다.MVVM(Model View View Model)이 많은 인정을 받은 것으로 보입니다.

개인적으로 WPF는 그럴 가치가 있지만 경고를 받아야 한다고 생각합니다.또한 사용자를 Windows XP SP2+ 및 Windows Vista로 효과적으로 제한합니다.저희가 결정을 내렸으나, 다른 요구 사항이 있을 수 있습니다.

두 기술 모두 장단점이 있습니다."클래식" UI가 있는 대형 응용 프로그램에서는 Windows Forms를 사용합니다.풍부한 사용자 인터페이스(스킨, 애니메이션, 변화하는 사용자 인터페이스)가 필요한 애플리케이션에서는 WPF를 선택합니다.WPF vs. 문서를 확인하십시오. WPF와 Windows Forms를 비교하는 Windows Forms.

UI 설계의 유연성 외에도 WPF에는 몇 가지 기술적 이점이 있습니다.

1.) WPF는 GDI 객체에 의존하지 않습니다.글쎄요, 창 자체의 예로 2개의 GDI 객체를 사용한다고 생각하지만, 그것은 실질적으로 아무것도 아닙니다.저는 대규모 내부 Windows Forms 응용프로그램에 어느 정도 관여해 왔습니다.우리 사무실 사람들은 가끔 3~4개의 인스턴스를 동시에 실행합니다.문제는 Windows 2000, XP 및 Vista에 고유한 10,000 GDI 개체 한계에 자주 부딪힌다는 것입니다.이러한 상황이 발생하면 전체 OS가 응답하지 않고 시각적인 아티팩트가 나타나기 시작합니다.이 문제를 해결할 수 있는 유일한 방법은 애플리케이션을 종료하는 것입니다.

2.) WPF는 GPU를 활용합니다.WPF가 UI 처리의 일부를 GPU로 오프로드하는 기능은 훌륭합니다.저는 단지 시간이 지날수록 이런 면이 더 나아지기를 기대합니다.전 OpenGL 프로그래밍 취미로서 GPU에서 나오는 힘을 이해할 수 있습니다.100달러짜리 비디오 카드에는 112개의 코어가 각각 1.5GHz로 실행되고 있습니다(이것은 결코 최고가 아닙니다).이러한 병렬 처리 능력은 모든 쿼드코어 CPU를 수치스럽게 만들 수 있습니다.

하지만, WPF는 여전히 꽤 새로운 것입니다.Windows 2000에서는 실행되지 않습니다.실제로 WPF 애플리케이션은 새로 재부팅한 후에 시작하는 속도가 느릴 수 있습니다.저는 이 모든 것에 대해 제 블로그에서 이야기합니다: http://blog.bucketsoft.com/2009/05/wpf-is-like-fat-super-hero.html

저는 WPF를 배울 가치가 있다고 생각합니다.일단 당신이 속도를 내게 되면, 당신의 양식에 대한 디자인 작업은 훨씬 더 쉬워집니다. IMHO.저는 섹시한 것에 대해 그렇게 걱정하지 않을 것입니다.이것의 대부분은 그저 유행일 뿐입니다.WPF에서는 '일반' Winforms 스타일의 응용프로그램을 매우 빠르고 쉽게 만들 수 있습니다.

전체 개념은 IMO 설계를 보다 쉽게 할 수 있습니다.

저는 여기에 있는 몇 가지 답변에 동의하지 않습니다. WPF는 LOB(Line of Business) 애플리케이션에 매우 적합합니다.(Frog 설계 LOB 클라이언트가 가장 좋은 예입니다.)또한 비즈니스 애플리케이션에서 필요하지 않은 UI를 사용할 수 있는 모든 가능성 외에도 WPF는 훨씬 더 많은 기능을 제공합니다.

데이터 바인딩 및 템플릿 기능은 Windows Forms보다 우수합니다.또한 코드와 프레젠테이션을 분리하는 훨씬 더 나은 방법을 제공합니다.우리는 개발자가 2-3명 이하인 팀에서 2개의 LOB 애플리케이션에 WPF를 성공적으로 사용했습니다.

여러분이 직면하게 될 가장 큰 문제는 아마도 WPF에 익숙하지 않은 개발자들과 함께 개발 속도를 떨어뜨릴 WPF의 가파른 학습 곡선일 것입니다.

현재 Windows Forms에서 WPF로 응용프로그램을 다시 작성하고 있습니다.네, 가파른 학습 곡선이 있고 여러분은 몇 가지를 "재학습"해야 하지만, 그것은 매우 가치가 있습니다.그리고 WCF와 결합하여 우리는 그 어느 때보다 코드를 적게 쓰고, 더 빠르고, 더 강력하게 쓰고 있습니다.

Adam Nathan의 책을 읽고 TelerikComponent One과 같은 타사 제어 장치의 라이브러리를 확인하십시오.제가 보기에 한 가지 부정적인 점은 Expression Blend라는 디자인 도구가 사용하기에 매우 어색하다는 것입니다.최신 버전은 아직 베타 버전이지만 Visual Studio를 수년간 사용해온 사용자에게는 적합하지 않은 것 같습니다.예, 주로 디자이너를 위한 것이지만 Visual Studio에서는 할 수 없는 작업도 있습니다.

WPF는 더 나은 UI 환경을 제공할 수 있으므로 인터페이스 설계가 중요한 경우 WPF를 고려합니다.그러나 Windows Forms는 수년간의 진화 과정을 거쳤기 때문에 제대로 작동하는 것으로 입증되었으며 해당 플랫폼에 적합한 다양한 프로그래머를 찾을 수 있습니다.

또한 휴대성도 문제가 될 수 있습니다. WPF는 Windows XP SP2 이상에서만 작동합니다.

또한 WPF는 학습 곡선이 가파르기 때문에 특정 WPF 경험이 없이는 고품질 제품을 제공하기가 쉽지 않습니다.

WPF는 .NET 3.0의 일부이기 때문에 "1.1 또는 2.0을 지원해야 할 때"라는 대답이 있습니다.WPF에 대해 알려진 OS 제한이 있으며, 분명한 기술 문제가 있습니다. Winform을 아는 개발자 팀이 있다면 Winform을 사용하여 강력한 코드를 생성하는 것이 더 쉬울 수 있습니다.그러나 UI 코드를 많이 작성하는 경우 WPF를 시작할 가치가 있습니다.

또한 WPF는 Silverlight와 많은 공통점을 공유하므로 이전 가능한 이점이 있습니다.

WPF에는 우수한 데이터 바인딩 기능, 관심사 분리, 설계 및 논리 분리 등과 같은 많은 이점이 있습니다.

개발자로서 저는 Windows Forms 디자이너에 얽매이지 않고 XAML을 사용하여 UI를 정의하는 기능을 즐기고 있으며, 제 앱을 보기 좋게 만들기 위해 다른 디자이너에게 의지할 수 있다는 것을 알게 되어 기분이 좋습니다.

개인적으로 이전 버전의 Windows가 지원되지 않는 것은 신경 쓰지 않지만 WPF의 큰 문제 중 하나는 Mono(http://www.mono-project.com )에서 (현재/이전에) 지원되지 않는다는 것입니다. 따라서 WPF 앱이 Mac OS 또는 Linux에서 실행되지 않는다는 것입니다. (Atough Silverlight 애플리케이션은 그럴 것입니다.)

WPF 학습에 투자할 시간과 자원이 있다면 그렇게 하세요!여러 OS를 지원하기 위해 Silverlight 애플리케이션을 작성하는 경우에도 마찬가지입니다.

SWF로 여러 OS의 스틱에서 실행할 데스크톱 애플리케이션이 필요한 경우.

많은 차이점들이 있습니다.WPF를 사랑한 이유:

  1. 선언적 프로그래밍 스타일입니다.
  2. 애니메이션 및 상태 전환
  3. 식 혼합은 훌륭한 도구입니다.
  4. 좋은 스타일의 지원.

그러나 우리는 다음과 같은 이유로 Windows Forms를 고수했습니다.

  1. 개발자가 Windows 양식을 이미 알고 있을 때 WPF를 학습하는 데 걸리는 추가 시간입니다.
  2. WPF는 윈도우즈 2000 이하에서 실행되지 않습니다.

사용할 .NET Framework를 결정할 때 가장 큰 고려 사항은 대상 사용자가 설치한 .NET Framework를 고려하는 것입니다.Windows Forms만 지원하는 하위 .NET Framework 버전을 사용하는 사용자가 더 많습니다. 하지만 그것은 제 개인적인 경험일 뿐입니다.

WPF의 장점은 사용자 지정 컨트롤과 애니메이션으로 보기 좋은 GUI를 훨씬 쉽게 만들 수 있다는 것입니다. 또한 WPF는 프레젠테이션 및 논리 계층을 더욱 구분하는 데 도움이 됩니다.디자이너가 있으면 이 작업의 95%를 비코더에게 팜할 수 있고 코더가 논리적으로 작업할 수 있습니다.단점은 Expressions Blend의 소프트웨어 비용과 Visual Studio 코드 프로파일링 도구가 부족하다는 것입니다. XAML을 렌더링할 때 프레임워크 호출에 휘말리는 경향이 있기 때문입니다.다른 사람들도 있겠지만 우리가 실제로 본 것은 이 두 명뿐이었습니다.

주요 고려 사항은 고객에게 .NET 3.0 이상의 .NET 3.5 SP1을 설치하도록 요구하는 경우입니다.부정적인 피드백을 받게 될 것입니다.

WPF를 사용하면 양식 디자인 작업을 디자이너 의류 개발자가 아닌 실제 디자이너에게 훨씬 쉽게 넘길 수 있습니다.만약 그것이 당신이 하고 싶은 것이라면, WPF가 당신의 대답입니다.일반적인 Windows(윈도우) 스타일의 단추로 문제가 없다면 Windows Forms(윈도우 폼)를 사용하는 것이 좋습니다.

인터페이스 설계가 "당신에게 중요한" 경우 WPF를 사용해야 한다는 여러 답변이 있지만 이는 상당히 모호합니다.인터페이스 설계는 항상 "중요"합니다.

MSDN 라이센스가 있는 경우 Expression 도구를 확인하십시오.WPF용으로 명시적으로 설계되었으며 Visual Studio로 직접 내보내므로 전환 작업을 쉽게 수행할 수 있습니다.

Windows(윈도우) 지원에만 관심이 있고 Windows(윈도우)를 학습하는 데 걸리는 시간을 신경 쓰지 않는다면 WPF를 사용하십시오.빠르고, 유연하며, 피부를 벗겨내기 쉽고, 사용할 수 있는 훌륭한 도구가 있습니다.

부차적인 보너스로 Silverlight는 WPF를 기반으로 하며 둘 중 하나로 시작하면 다른 하나와 함께 작업하는 방법을 배울 수 있습니다.웹 기반으로 작업이 계속 진행되는 경우 브라우저(또는 Windows Live Mesh)로 쉽게 전송할 수 있는 사전 지식(및 기존 코드 라이브러리)이 있으면 소프트웨어의 수명을 연장하는 데 도움이 될 수 있습니다.

위 답변에서 이미 설명한 장단점을 고려하여 WPF로 결정한다면 이 dnr을 거치는 것을 강력히 추천합니다.빌리 홀리스와의 TV 에피소드

DotNetRocks 315화에서 Brian Noyes는 이에 대해 광범위하게 논의합니다.

WPF에서 텍스트 렌더링과 관련하여 알려진 문제가 있습니다.많은 사용자들은 안티앨리어싱과 픽셀 블렌딩을 많이 사용하면 텍스트가 흐려진다고 보고합니다.이것은 어떤 상황에서는 큰 문제이며, 제가 알기로는 마이크로소프트에서 어느 정도 인정한 것으로 알고 있습니다.

지난 3년 반 동안 저는 (두 회사에서) Windows Forms 개발을 해왔습니다.두 애플리케이션 모두 광범위하게 사용되었으며 결국 GDI 문제가 발생했습니다.대규모 Windows Forms 응용 프로그램은 결국 GDI 리소스가 부족하게 되어 최종 사용자가 재부팅해야 합니다.

Scott은 Expression Blend에 대해 불평하고 있으며 개발자인 그에게 어떻게 그것이 말이 되는지에 대해 불평하고 있습니다.익스프레션 블렌드에 대한 저의 첫 반응은 이랬습니다.하지만 지금은 매우 귀중한 도구라고 생각하지만, 실제로는 당신이 어떤 유형의 개발자인지에 따라 다릅니다.

저는 Integrator 역할을 수행해야 했던 사용자 인터페이스 개발자입니다. 결국 스타일을 만들고 템플릿을 WYSIWYG 방식으로 제어하는 데 Expression Blend가 매우 유용하다는 것을 알게 되었습니다.거의 항상 Expression Blend와 Visual Studio가 같은 프로젝트에서 동시에 실행됩니다.

또한 Expression Blend에서 놀고 뱉어내는 XAML을 보는 것은 WPF API를 배울 수 있는 훌륭한 방법이라고 생각합니다. Windows Forms에서 디자이너를 사용하고 뱉어내는 C# 코드를 확인하는 것과 마찬가지로, 설계 중인 것을 학습하는 데 도움이 됩니다.

식 혼합이 유용합니다.특히 애플리케이션의 비주얼 작업을 하는 경우에는 한 번 시도해 보십시오.

Mark의 이전 게시물 인용:

  • Windows Forms에서 사용자 인터페이스를 설계한 다음 해당 사용자 인터페이스를 구동하는 코드를 작성합니다. 일반적으로 데이터 개체를 구동하는 코드도 포함됩니다.
  • WPF에서는 데이터 개체를 구동하는 비즈니스 계층에 투자한 다음 데이터 개체를 수신하는 인터페이스를 설계합니다.

Windows Forms 또는 WPF를 사용하는지 여부보다는 디자인을 선택하는 것이 더 중요하다고 생각합니다.그러나 특정 기술이 특정 접근 방식에 더 적합할 수 있다는 것을 이해할 수 있습니다.

WPF 전문 지식이 없고 투자하고 싶지 않은 경우에만 :)

언급URL : https://stackoverflow.com/questions/202079/wpf-versus-windows-forms