আমার একটা দৃশ্য আছে (উইন্ডোজ ফর্ম, সি #,। নেট)
- একটি প্রধান ফর্ম রয়েছে যা কিছু ব্যবহারকারীর নিয়ন্ত্রণকে হোস্ট করে।
- ব্যবহারকারীর নিয়ন্ত্রণ কিছু ভারী ডেটা অপারেশন করে, যেমন আমি যদি সরাসরি
UserControl_Load
পদ্ধতিটিকে কল করি তবে ইউআই লোড পদ্ধতি কার্যকর করার সময়কালের জন্য প্রতিক্রিয়াহীন হয়ে যায়। - এটিকে কাটিয়ে উঠতে আমি বিভিন্ন থ্রেডে ডেটা লোড করি (বিদ্যমান কোডটি যতটা পারি সামান্য পরিবর্তন করার চেষ্টা করছি)
- আমি একটি পটভূমি কর্মী থ্রেড ব্যবহার করেছি যা ডেটা লোড করা হবে এবং হয়ে গেলে অ্যাপ্লিকেশনটি এটির কাজটি জানিয়েছে।
- এখন আসল সমস্যা। সমস্ত ইউআই (মূল ফর্ম এবং তার শিশু ব্যবহারকারী নিয়ন্ত্রণ) প্রাথমিক মূল থ্রেডে তৈরি হয়েছিল। ব্যবহারকারী নিয়ন্ত্রণের লোড পদ্ধতিতে আমি ব্যবহারকারীকন্ট্রোলের কিছু নিয়ন্ত্রণের (যেমন টেক্সটবক্সের) মানগুলির ভিত্তিতে ডেটা আনছি।
সিউডোকোডটি দেখতে এমন হবে:
কোড ২
UserContrl1_LoadDataMethod()
{
if (textbox1.text == "MyName") // This gives exception
{
//Load data corresponding to "MyName".
//Populate a globale variable List<string> which will be binded to grid at some later stage.
}
}
এটি দেওয়া ব্যতিক্রম ছিল
ক্রস-থ্রেড অপারেশন বৈধ নয়: থ্রেডটি তৈরি হওয়া থ্রেড ব্যতীত অন্য কোনও থ্রেড থেকে নিয়ন্ত্রণ করা।
এ সম্পর্কে আরও জানতে আমি কিছু গুগলিং করেছি এবং নীচের কোডটি ব্যবহার করার মতো একটি পরামর্শ এলো
কোড 2
UserContrl1_LoadDataMethod()
{
if (InvokeRequired) // Line #1
{
this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
return;
}
if (textbox1.text == "MyName") // Now it wont give an exception
{
//Load data correspondin to "MyName"
//Populate a globale variable List<string> which will be binded to grid at some later stage
}
}
তবে বাট ... তবে মনে হচ্ছে আমি ফিরে এসেছি। আবেদনটি আবার প্রতিক্রিয়াহীন হয়ে ওঠে। শর্ত থাকলে # 1 লাইনটি কার্যকর করার কারণে এটি বলে মনে হচ্ছে। লোডিংয়ের কাজটি আবার প্যারেন্ট থ্রেড দ্বারা সম্পন্ন হয় এবং তৃতীয়টি নয় sp
আমি বুঝতে পারি না আমি এটি সঠিক বা ভুল বুঝতে পেরেছি কিনা। আমি থ্রেডিংয়ে নতুন।
আমি কীভাবে এটি সমাধান করব এবং এছাড়াও ব্লক হলে # 1 লাইন কার্যকর করার কী প্রভাব রয়েছে?
পরিস্থিতিটি হ'ল : আমি কোনও নিয়ন্ত্রণের মানের ভিত্তিতে বৈশ্বিক চলকগুলিতে ডেটা লোড করতে চাই। আমি শিশু থ্রেড থেকে কোনও নিয়ন্ত্রণের মান পরিবর্তন করতে চাই না। আমি কোনও সন্তানের সুতো থেকে এটি করতে যাচ্ছি না।
সুতরাং শুধুমাত্র মানটি অ্যাক্সেস করা যাতে সম্পর্কিত ডেটাবেস থেকে আনতে পারে।