টাইমারকে ডিসপ্যাচারটাইমারের সাথে তুলনা করা


98

একটি পার্থক্য কি between System.Windows.Forms.Timer()এবং System.Windows.Threading.DispatcherTimer()? কোন ক্ষেত্রে, আমাদের সেগুলি ব্যবহার করা উচিত? কোন সেরা অনুশীলন?

উত্তর:


111

Windows.Forms.Timerটাইমার ইভেন্টগুলি প্রক্রিয়া করতে উইন্ডোজ ফর্ম বার্তা লুপ ব্যবহার করে। উইন্ডোজ ফর্ম অ্যাপ্লিকেশনগুলিতে ব্যবহৃত টাইমিং ইভেন্টগুলি লেখার সময় এটি ব্যবহার করা উচিত এবং আপনি টাইমারটি প্রধান UI থ্রেডে চালিত করতে চান।

DispatcherTimerডাব্লুপিএফ সময় ব্যবস্থা। আপনি যখন সময়কে একই পদ্ধতিতে পরিচালনা করতে চান তখন এটি ব্যবহার করা উচিত (যদিও এটি একক থ্রেডের মধ্যে সীমাবদ্ধ নয় - প্রতিটি থ্রেডের নিজস্ব প্রেরণকারী রয়েছে) এবং আপনি ডাব্লুপিএফ ব্যবহার করছেন। এটি ডিসপ্যাচারের মতো একই থ্রেডে ইভেন্টটিকে আগুন দেয়।

সাধারণভাবে, WPF == DispatcherTimerএবং Windows Forms == Forms.Timer

বলা হচ্ছে, System.Threading.Timerএটি একটি টাইমার classযা পৃথক থ্রেডে আগুন দেয়। খাঁটি সংখ্যাসূচক সময়গুলির জন্য এটি ভাল, যেখানে আপনি ইউআই ইত্যাদি আপডেট করার চেষ্টা করছেন না etc.


4
আপনার দ্রুত সাড়া দেওয়ার জন্য ধন্যবাদ। সুতরাং এর অর্থ হ'ল আমি যখনই ইউআই সম্পর্কিত কোনও টাইমার পেতে চাই তখন আমার ডিসপ্যাচারটাইমার ব্যবহার করা উচিত এবং আমি যখন টাইমার চালিত করতে চাই, যা আমি ইউএল জমা করতে চাই না, তখন আমার সিস্টেম.ট্রেডিং T টাইমারটি আলাদাভাবে ব্যবহার করা উচিত থ্রেড দ্বিতীয় প্রশ্নটি হ'ল: যদি আমি ডিসপ্যাচারটাইমার ব্যবহার করতে চাই এবং আমি টাইমারটি ইউআই-তে আবদ্ধ না করে রাখতে চাই, তবে আমি কি সিস্টেম.থ্র্যাডিং.টাইমার বা এখনও ডিসপ্যাটাটাইমার ব্যবহার করে আলাদা থ্রেডে কল করব?
প্যারাডিসনোয়ার

4
এটি আপনি কী করতে চাইছেন তার উপর নির্ভর করে। আমি খুব কমই System.Treadread.Timer ব্যবহার করি - আমি সাধারণত ডিসপ্যাচার টাইমারকে আটকে থাকি এবং তারপরে একটি ব্যাকগ্রাউন্ড ওয়ার্কারের মতো কিছু ব্যবহার করে আপনার ওয়ার্ক (যা আপনার ইউআইকে অবরুদ্ধ করতে পারে) করতে পারি। টাইমারদের সত্যই কখনই আপনার ইউআইকে ব্লক করা উচিত নয়, যদি না আপনি তাদের ইভেন্ট হ্যান্ডলারে "অত্যধিক" কাজ না করেন।
রিড কোপসি

সময়ের সাথে সাথে ডিসপ্যাচারটাইমারের প্রসেসর খাওয়া নিয়ে আমার সমস্যা হচ্ছে। এটি পরিচালনা করার জন্য কি কোনও ভাল উপায় আছে?
ডিসকোর্াক্স

সিপিইউ বিশেষত কী খাচ্ছে তা পরীক্ষা করে দেখুন। আপনি কি প্রচুর টাইমার তৈরি করছেন, যা থামানো হচ্ছে না?
রিড কোপসি

4
আপনি বিরতি সম্পত্তি সঠিকভাবে সেট করেছেন তা নিশ্চিত করুন। এটি করবেন না: টাইমার 1.ইন্টারওয়াল = নতুন টাইমস্প্যান (1000); // "1000" টিক্সকে মিলিসেকেন্ড নয় প্রতিনিধিত্ব করে! সিপিইউ উচ্চতর ছিল, যতক্ষণ না আমি এটি দিয়ে এটি সংশোধন করি: টাইমার 1.আইন্টারওয়াল = সিস্টেম.টাইমস্প্যান.ফ্রমসেকেন্ডস (1);
লনি সেরা

4

আমি এখানে ছোট উদাহরণগুলির সাথে টাইমার সম্পর্কে ভাল নিবন্ধটি পেয়েছি: http://www.progware.org/Blog/post/Timers-in-WPF.aspx

উপসংহার হিসেবে:

যদি ডসোমথিং () জিইআইআই উপাদানগুলিকে ম্যানিপুলেট করে তবে টাইমারের সাথে আপনার ব্যবহার করা উচিত: এটি.ডিসপ্যাচার.আইভাক ((অ্যাকশন) ডেলিগেট {// জিইআইআই রিলেটেড কোড এখানে} যেহেতু আপনি সরাসরি আলাদা থ্রেড থেকে জিআইআই নিয়ন্ত্রণগুলি অ্যাক্সেস করতে পারবেন না। ডিসপ্যাচারটাইমার দিয়ে আপনি করেন এটা করার দরকার নেই।

যদি ডসোমথিং () কোনও সময়সাপেক্ষ কার্য সম্পাদন করে, তবে ডিসিপ্যাচারটাইমারের ক্ষেত্রে জিইউআই জমা হবে। টাইমারের ক্ষেত্রে এটি দীর্ঘায়িত হবে না, কারণ দীর্ঘ মিথগুলি অন্য কোনও থ্রেডে কার্যকর করা হয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.