خیلی ممنون استاد
خوب اگه رندر در نخ مجزایی انجام میشه ، پس چرا مشکل با ایجاد کردنِ کنترل در نخ مجزا را داره؟
چون اگه اشتباه نکنم ، عاملی که باعث میشه با کنترل ها در نخ مجزا مشکل پیدا کنه ، رسم و رندر کنترل هست دیگه ؟
وگرنه برای ایجاد اغلب قریب به اتفاقِ اشیاهای دیگه بجز کنترل ها و اشیاء های گرافیکی ، در نخ های دیگه که مشکلی نیست .
الان استاد ، من موارد را بصورت زیر ویرایش کردم . بی زحمت دوباره چک میکنید ؟ :
مزایای WPF نسبت به Windows Form :
1) تغییر ظاهر کنترل ها به هر شکل دلخواه توسط Template ها بدون اینکه منطق کنترل تحت تاثیر قرار بگیره.
این ، یکی از مهم ترین قابلیت های WPF به شمار میره که باعث میشه نیاز به استفاده از کنترل ها و کمپوننت های شرکت های دیگه (مثل Telerik و ...) نشه یا بصورت چشمگیری کم بشه .
.
.
تشکر
سلامی مجدد استاد .
استاد ، منابع بیشتری را بررسی کردم ، لیست مزایا و معایب و ویژگی های wpf را مجددا نوشتم .
کلا بیش از 90 درصد اینها ، ترجمه ی مستقیم یا مفاهیم منابع هست (که حالا یکی دو تاشو میذارم . چون زیادن و بیش از 10 تا لینک هستن) . چیزهایی که خودم اضافه کردم ، معمولا به عنوان توضیحات اضافی تر هستن .
اما استاد ، شخصا بعضی از مطالب از بعضی از این سایت های انگلیسی را دیدم ، شخصا حداقل حس میکنم که در بعضی موارد ، مطالبی را اشتباهی گفتن . گاها ، اشتباه واضحی بود (که البته من اونها را نیاوردم) .
======================
حالا استاد چک میکنین که چیزهایی که نوشتم ، درستن؟ :
مزایای WPF نسبت به Windows Form :
1) با پیاده سازی معماری MVVM در پروژه ، منطق تجاری با رابط کاربری ، از هم جدا میشن و به این ترتیب ، برنامه نویس میتونه منطق تجاری برنامه ، و طراح میتونه ظاهر کاربری برنامه را همزمان با هم انجام بدن .
همچنین این معماری ، قابلیت نگهداری و به روزرسانی و unit testing برنامه را بسیار بهبود میبخشه .
بخاطر Binding بهتر و استفاده از Command ها در WPF ، پیاده سازی معماری MVVM در WPF ، راحت تر از پیاده سازی این معماری در WinForm هست .
2) WPF ، یک سیستم نمایش قابل ترکیب هست . یعنی اغلب المنت هاش میتونن از ترکیب شدن توسط المنت های دیگه ، تشکیل بشن .
مثلا یک ComboBox ، ترکیبی از المنت TextBox و المنت Popup هست که هر کدوم از این دو المنت ، مجددا ترکیبی از المنت های دیگه میتونن باشن .
3) استفاده از Template ها که مدل انعطاف پذیر برای ساختن رابط کاربری را ارائه میکنه .
4) ایجاد تم و اسکین (Theme & Skin) توسط Style .
5) استفاده از افکت ها (مثل تار کردن و افکت های دیگه) و خصوصیات بیشتر برای کنترل ها نسبت به WinForm .
قابلیت های متنوع و پیشرفته مثل تنظیم چرخش ، شفافیت ، Mask ، Skew در کنترل ها و ... .
6) انیمیشنی و متحرک کردن کنترل ها .
7) استفاده از Vector Graphic برای رسم اجزاء گرافیکی (اجزاء تشکیل دهنده ی کنترل ها و ...) که باعث میشه با بزرگتر یا کوچیکتر شدن (نسبت به رسم شی گرافیک های برداری) ، کیفیت رسم اش کمتر نشه و تغییری نکنه .
- WinForm ، از Raster Graphic یا همون Bitmap برای رسم اجزای گرافیکی اش (مثل اجزاء کنترل ها) استفاده میکنه که ابعاد محدودی داره و با بزرگتر کردن (از حداکثرِ ابعادش) ، باعث کم شدن کیفیت میشه .
8) از رابط کاربری DirectX برای ترسیمات و رندر استفاده میکنه که باعث میشه از کارت گرافیک برای رندر به کار گرفته بشه .
- WinForm از رابط GDI+ برای ترسیمات استفاده میکنه .
9) بصورت Resolution Independent و مستقل از ریزولیشن عمل میکنه . به این معنا که اگه تنظیمات ریزولیشن و همچنین تنظیماتِ dpi در هر مانیتوری ، روی مقدارِ پیش فرضِ همون مانیتور تنظیم شده باشه ، در این صورت ، اندازه ی پنجره های WPF ، در مانیتورهای مختلف ، یکسان میشه .
10) چیدمان (Layout) منعطف تر
سفارشی کردن راحت تر المنت ها و کنترل ها
ابزارهای بیشتر برای debugging کردن . مثل Xaml Hot Reload و Live Visual Tree و ... .
سرعت بیشتر و صرف زمان کمتر برای طراحی ظاهر کاربری دلخواه
ایجاد اشیاء 3 بعدی
سیستم پشتیبانی از چند رسانه ای (صوت و تصویر) built-in
مهاجرت راحت تر به .Net Core
و ... .
-------------------------------
معایب WPF نسبت به Windows Form :
1) استفاده از منابع بیشترِ سخت افزار
2) بخاطر جدا بودنِ نخِ رسم کننده ی کنترل ها در WPF (و بخاطر هماهنگیِ کمتر نسبت به یک نخ و همچنین سربارِ بیشترِ نخ مجزا) ، بعد از ارسال درخواستِ رسمِ کنترل ، تاخیرِبیشتری نسبت به Win Form برای رسم کنترل ها وجود دارد .
3) کنترل هایی که مایکروسافت برای WPF طراحی کرد ، گاها نسبت به WinForm ، کمتر هست . مثل کنترل NumericUpDown و NotifyIcon و ... .
برای استفاده از این نوع کنترل ها در WPF ، باید از کمپوننت های مجزا استفاده کرد .
4) مدت زمان یادگیری WPF ، بیشتر از WinForm به طول میانجامد .