[স্ট্যাথ্রেড] কি করে?


293

আমি সি # 3.5 শিখছি এবং আমি জানতে চাই যে [STAThread]আমাদের প্রোগ্রামগুলিতে কী ঘটে?

উত্তর:


240

STAThreadAttributeমূলত এর COM উপাদান সঙ্গে যোগাযোগ করার জন্য উইন্ডোজ বার্তা পাম্প জন্য প্রয়োজন। যদিও মূল উইন্ডোজ ফর্মগুলি সিওএম ব্যবহার করে না, তবে সিস্টেমের ডায়ালগগুলির মতো ওএসের অনেকগুলি উপাদান এই প্রযুক্তি ব্যবহার করে।

এমএসডিএন কারণটিকে আরও কিছুটা বিশদে ব্যাখ্যা করেছে:

STAThreadAttribute নির্দেশ করে যে অ্যাপ্লিকেশনটির জন্য COM থ্রেডিং মডেলটি একক থ্রেডযুক্ত অ্যাপার্টমেন্ট। এই বৈশিষ্ট্যটি অবশ্যই উইন্ডোজ ফর্ম ব্যবহার করে এমন কোনও অ্যাপ্লিকেশনের প্রবেশের পয়েন্টে উপস্থিত থাকতে হবে; যদি এটি বাদ দেওয়া হয় তবে উইন্ডোজ উপাদানগুলি সঠিকভাবে কাজ করতে পারে না। বৈশিষ্ট্যটি উপস্থিত না থাকলে, অ্যাপ্লিকেশনটি মাল্টিথ্রেডেড অ্যাপার্টমেন্ট মডেল ব্যবহার করে, যা উইন্ডোজ ফর্মগুলির জন্য সমর্থিত নয়।

এই ব্লগ পোস্ট ( কেন স্ট্যাথ্রেড প্রয়োজন? ) এছাড়াও প্রয়োজনীয়তাটি বেশ ভালভাবে ব্যাখ্যা করে। থ্রেডিং মডেল কীভাবে সিএলআর স্তরে কাজ করে সে সম্পর্কে যদি আপনি আরও গভীরতর দৃষ্টিভঙ্গি চান তবে জুন 2004 (এমক্রিভড, এপ্রিল ২০০৯) থেকে এই এমএসডিএন ম্যাগাজিনের নিবন্ধটি দেখুন see


1
কোনও ধারণা কেন কমপ্যাক্ট ফ্রেমওয়ার্ক সমর্থন করে না [STAThread]?
বিভিডিবি

1
এই উত্তরটি আমার মতো নৃশংসদের পক্ষে বেশ বোধগম্য st এখানে কেবলমাত্র রেফারেন্সের জন্য যুক্ত করা হয়েছে
বারে আক্কুর্ট

41

এটি সংকলকটিকে বলে যে আপনি একক থ্রেড অ্যাপার্টমেন্ট মডেলটিতে আছেন। এটি একটি দুষ্ট COM জিনিস, এটি সাধারণত উইন্ডোজ ফর্মগুলির জন্য ব্যবহার করা হয় (জিইআইআই এর) যে এটি ড্রইংয়ের জন্য উইন 32 ব্যবহার করে, যা এসটিএ হিসাবে প্রয়োগ করা হয়। আপনি যদি একাধিক থ্রেড থেকে স্টা মডেল এমন কিছু ব্যবহার করেন তবে আপনি দূষিত বস্তু পেয়ে যাবেন।

এজন্য আপনাকে গুইকে অন্য থ্রেড থেকে প্রার্থনা করতে হবে (যদি আপনি কোনও ফর্ম কোডিং করে থাকেন)।

মূলত এটি সম্পর্কে চিন্তা করবেন না, কেবল এটি গ্রহণ করুন যে উইন্ডোজ জিইউআই থ্রেডগুলি অবশ্যই এসটিএ হিসাবে চিহ্নিত করা উচিত অন্যথায় অদ্ভুত জিনিসগুলি ঘটে।


2
জিইউআইতে অ্যাক্সেস করার সময় স্ট্র্যাডের মূল থ্রেডটি চাওয়ার প্রয়োজনের সাথে কোনও সম্পর্ক নেই। এটি কেবল উইন্ডোজ মেসেজ পাম্পের প্রকৃতির কারণে এবং মাল্টিথ্রেডেড অ্যাপ্লিকেশনগুলিতে সাধারণত এড়ানো যায় না।
নলডোরিন

3
সত্যই, এটি কেবল ওএস ডায়ালগ এবং তৃতীয় পক্ষের উপাদানগুলির মতো COM উপাদানগুলির সাথে ডিল করার।
নলডোরিন

3
উইন 32 অ্যাপার্টমেন্টের থ্রেডিংয়ের কোনও ধারণা বহন করে না, এর সিওএম যা ধারণাটি প্রবর্তন করে। সিওএম "রি-টাস্কস" সিওএম অ্যাপার্টমেন্টগুলিতে কোড ক্রিয়াকলাপকে সিঙ্ক্রোনাইজ / সিরিয়ালাইজ করার একটি উপায় হিসাবে একটি সম্পূর্ণ থ্রেড অগ্নোস্টিক সিস্টেম (উইন্ডোজ বার্তা পাম্প) কী ছিল।
অ্যান্থনিডাব্লু জোন্স

1
কেবল গ্রহণ করুন যে উইন্ডোজ গুই থ্যাডগুলি অবশ্যই এসটিএ হিসাবে চিহ্নিত করা উচিত অন্যথায় অদ্ভুত জিনিসগুলি ঘটে। :)))))))
নিপুনা

1
@ নলডোরিন "মূল থ্রেড শুরু করার প্রয়োজন" - এটি প্রযুক্তিগতভাবে কোনও প্রয়োজন নয় । ক্রস-থ্রেড ব্যতিক্রমগুলি ডিবাগারের বাইরে ঘটে না। রেফারেন্স: স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / 397272727/… । বলছেন না যে আপনার এই সমস্যাটি সমাধান করা উচিত নয়!
শিব

31

এসএটিথ্রেডএট্রিবিউট সিওএম প্রয়োজন হলে সিঙ্গল-থ্রেডড সিওএম অ্যাপার্টমেন্ট ব্যবহার করতে একটি থ্রেড চিহ্নিত করে। ডিফল্টরূপে .NET মোটেও COM আরম্ভ করবে না। এটি কেবল তখনই যখন সিওএম প্রয়োজন হয়, যেমন কোনও সিওএম অবজেক্ট বা সিওএম কন্ট্রোল তৈরি করা হয় বা যখন টানা 'এন' ড্রপ প্রয়োজন হয় তখন সেই সিওএমটি আরম্ভ হয়। যখন এটি হয়, .NET অন্তর্নিহিত CoInitializeEx ফাংশন কল করে, এটি একটি পতাকা বহন করে যা একটি থ্রেডকে একাধিক-থ্রেডযুক্ত বা একক থ্রেডযুক্ত অ্যাপার্টমেন্টে যুক্ত করতে হবে তা নির্দেশ করে।

এখানে আরও তথ্য পড়ুন (সংরক্ষণাগার, জুন ২০০৯)

এবং

স্ট্যাথ্রেড কেন প্রয়োজন?

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