티스토리 뷰
Windows Forms는 2018 년 후반에 오픈 소스로 .NET Core로 포팅 된 이후로 팀과 외부 기여자 모두 오래된 버그를 수정하고 새로운 기능을 추가했습니다. 이 게시물에서는 .NET 5.0에서 Windows Forms 런타임의 새로운 기능에 대해 설명합니다.
What's new in Windows Forms runtime in .NET 5.0 | .NET Blog (microsoft.com)
Windows controls additions and enhancements
New TaskDialog control
작업 대화 상자는 정보를 표시하고 사용자로부터 간단한 입력을 받는 데 사용할 수 있는 대화 상자이며, 메시지 상자보다 더 많은 기능이 있습니다. 메시지 상자와 마찬가지로 설정 한 매개 변수와 운영 체제에 의해 출력 형식이 지정됩니다.
ListView enhancements
ListView 컨트롤은 Windows Forms 개발자에게 매우 익숙하지만 축소 가능한 그룹, 그룹 작업, 자막 및 바닥 글과 같이 Windows Vista에 추가 된 여러 기능에 쉽게 액세스 할 수 있는 API가 부족했습니다.
.NET 5.0에서 우리는 API 격차를 줄이고, 이제 Windows Forms의 ListView는 네이티브 Win32 컨트롤 비슷해 졌습니다.
FileDialog enhancement
FileDialog는 새로운 API 인 FileDialog.ClientGuid를 받았습니다. Windows 파일 대화 상자를 사용하면 호출 응용 프로그램이 GUID를 대화 상자의 지속 된 상태와 연결할 수 있습니다. 대화 상자의 상태에는 마지막으로 방문한 폴더, 대화 상자의 위치 및 크기와 같은 요소가 포함될 수 있습니다. 일반적으로이 상태는 실행 파일의 이름을 기반으로 유지됩니다. GUID를 지정하면 응용 프로그램은 동일한 응용 프로그램 (예 : 가져 오기 대화 상자 및 열린 대화 상자) 내에서 서로 다른 버전의 대화 상자에 대해 서로 다른 지속 상태를 가질 수 있습니다.
Performance improvements
Windows Forms는 Win32 API 집합에 의해 관리되는 래퍼로 알려져 있습니다. 따라서 Windows Forms는 관리되지 않는 Windows 구성 요소와 통신하기 위해서는 항상 interop 계층에 크게 의존해 왔습니다. .NET Core 초창기의 최우선 순위는 interop 계층을 최적화하고, 구조체를 blittable로 만들고, 보다 효율적인 "W"-functions를 명시 적으로 선택하고, 가능한 경우 "unsafe"코드를 사용하는 것이 었습니다. 이러한 모든 변화는 우리가 "peanut butter changes"라고 부르는 것입니다. 각 변화는 작으며 거의 관찰 할 수 없다는 점에서 그렇습니다. 그러나 응용 프로그램의 수명 동안 이러한 변화는 상당한 성능 향상을 가져옵니다.
.NET 5.0에서는 기준을 높이고 여러 페인팅 경로를 최적화했습니다. 역사적으로 Windows Forms는 렌더링 작업을 위해 GDI+ (및 일부 GDI)에 의존했습니다. GDI+는 Graphics 개체를 통해 장치 컨텍스트 (모니터 나 프린터와 같은 특정 디스플레이 장치에 대한 정보가 포함 된 구조)를 추상화하므로 GDI보다 사용하기가 더 쉽지만 추가 오버 헤드로 인해 속도가 느립니다. 단색과 브러시를 다루는 여러 상황에서 우리는 GDI를 사용하기로 결정했습니다.
또한 IDeviceContext 인터페이스를 사용하여 숫자 렌더링 관련 API (예 : PaintEventArgs)를 확장했습니다.이 인터페이스는 Windows Forms 개발자가 직접 사용할 수 없지만 GDI+ Graphics 개체를 우회하는 할당을 줄이고 속도를 높일 수 있었습니다. 이러한 최적화를 통해 다시 그리기 경로에서 메모리 소비가 크게 감소했으며 경우에 따라 메모리 할당시 x10의 절약효과를 가지게 되었습니다.
마지막으로, TextRenderer API를 확장하여 ReadOnlySpan<char> 오버로드를 허용했습니다. 텍스트 그리기 및 측정은 매우 일반적인 작업이기 때문입니다. 이렇게하면 새 문자열을 할당 했을 때 훨씬 더 효율적인 텍스트 렌더링이 가능합니다 (다른 입력 분할, 스택 기반 문자 배열 구축 등).
Accessibility improvements and fixes
지난 몇 년 동안 팀은 오늘날의 접근성 요구 사항 및 규정 준수를 충족하기 위해 20 년 된 Windows Forms SDK를 업데이트했습니다.
.NET 5.0에서는 다음을 포함하되 이에 국한되지 않는 많은 개선 사항을 추가했습니다.
또한 특정 접근성 도구에서 UX에 영향을 미치는 몇 가지 문제를 수정했습니다. 예를 들어 AccessibleObject에 액세스 할 때 더 이상 컨트롤의 핸들 생성이 먼저 발생하지 않도록 접근성 구현을 재 작업하여, 예측 가능한 컨트롤 동작을 보장하고 UI에서 예기치 않은 상황의 발생을 방지했습니다.
또한 접근성 도구가 UI를 올바르게 탐색하지 못하거나, 심각한 경우 응용 프로그램 충돌을 방지 할 수 있는 여러 컨트롤 (예 : PropertyGrid 및 MonthCalendar)의 동작을 개선하고 수정했습니다.
Visual Basic support
Visual Basic은 Application Framework와 함께 .NET 5 및 Visual Studio 16.8에서 지원됩니다! Visual Studio 16.8에는 Windows Forms 디자이너가 포함되어 있으므로 Visual Basic을 사용하면 기존 응용 프로그램을 마이그레이션하거나 새 응용 프로그램을 만들 수 있습니다.
더 자세한 사항은 여기를 참고합니다.
Breaking Changes
.NET Framework 및 .NET Core와의 역 호환성을 최대한 유지하려고 노력하지만 항상 가능한 것은 아닙니다. 여기에서 주요 변경 사항 목록을 찾을 수 있습니다.
Looking ahead
우리는 현재 높은 DPI 지원이 완벽하지 않다는 것을 알고 있으며 이는, .NET 6.0에서 개선 할 계획입니다. "높은 DPI 지원"이 의미하는 바에는 여러 측면이 있으므로 이것이 귀하에게 어떤 의미인지 자세히 알고 싶습니다. 구체적인 우려 사항이있는 경우 아래에 의견을 남기거나 dotnet/winforms에 직접 문제를 제출하십시오.
Reporting bugs and suggesting features
의견이나 제안이 있거나 문제가있는 경우 알려주십시오! Visual Studio 피드백 (Visual Studio의 오른쪽 상단 모서리에있는 단추 찾기)을 통해 Visual Studio 및 디자이너 관련 문제를 제출하고 GitHub 리포지토리에서 Windows Forms 런타임 관련 문제를 제출하세요.
'.NET 5, 6, 7' 카테고리의 다른 글
WinUI 3 Preview 3 (2) | 2021.01.08 |
---|---|
The future of .NET Standard (0) | 2021.01.04 |
MVVM Toolkit 사용 가이드 - 옛날 버전입니다 (8) | 2020.12.06 |
Introducing the MVVM Toolkit, a .NET Standard library (0) | 2020.12.03 |
.NET Conf 2020 Youtube (0) | 2020.11.19 |
- Total
- Today
- Yesterday
- Visual Studio 2022
- #prism
- IOT
- C#
- .net
- UWP
- dotNETconf
- .net 5.0
- Bot Framework
- #Windows Template Studio
- MVVM
- LINQ
- ef core
- windows 11
- Microsoft
- Behavior
- Cross-platform
- Build 2016
- ComboBox
- WPF
- #uwp
- kiosk
- uno-platform
- visual studio 2019
- uno platform
- XAML
- PRISM
- #MVVM
- Windows 10
- Always Encrypted
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |