আমি মাঝে মাঝে ব্যবহার করি (লোডে)
this.BeginInvoke((MethodInvoker) delegate {
// some code
});
অথবা
this.BeginInvoke((MethodInvoker) this.SomeMethod);
(যদি আপনি "এটি" ব্যতীত অন্য কোনও ইভেন্টে ইভেন্টটি পরিচালনা করছেন তবে আপনার ফর্ম ভেরিয়েবলটিতে "এটি" পরিবর্তন করুন)।
এটি উইন্ডোজ-ফর্ম লুপের উপর অনুরোধটি পুশ করে, সুতরাং যখন ফর্মটি বার্তা সারিটি প্রক্রিয়াকরণ করছে তখন এটি প্রক্রিয়াজাত হয়।
[অনুরোধে আপডেট করা]
কন্ট্রোল.ইনভোক / কন্ট্রোল.বেগইনভোক পদ্ধতিগুলি থ্রেডিংয়ের সাথে ব্যবহারের উদ্দেশ্যে এবং এটি ইউআই থ্রেডের উপর কাজ ঠেলে দেওয়ার একটি প্রক্রিয়া। সাধারণত এটি কর্মী থ্রেড ইত্যাদি দ্বারা ব্যবহৃত হয়। কন্ট্রোল.আনভোক একটি সিঙ্ক্রোনাস কল করেন, যেখানে-কন্ট্রোল .BeginInvoke একটি অ্যাসিঙ্ক্রোনাস কল করে।
সাধারণত, এগুলি হিসাবে ব্যবহৃত হবে:
SomeCodeOrEventHandlerOnAWorkerThread()
{
// this code running on a worker thread...
string newText = ExpensiveMethod(); // perhaps a DB/web call
// now ask the UI thread to update itself
this.Invoke((MethodInvoker) delegate {
// this code runs on the UI thread!
this.Text = newText;
});
}
এটি উইন্ডোজ বার্তার কাতারে একটি বার্তা চাপ দিয়ে এটি করে; ইউআই থ্রেড (কোনও এক পর্যায়ে) বার্তাটি ডি-কাতারে ফেলেছে, প্রতিনিধিটিকে প্রসেস করে এবং কর্মীটিকে এটি সম্পন্ন করার ইঙ্গিত দেয় ... এতদূর ভাল ;-p
ঠিক আছে; সুতরাং যদি আমরা কন্ট্রোলটি ব্যবহার করি তবে কি হবে? আমন্ত্রণ / নিয়ন্ত্রণ করুন e এটি কপি করে ... যদি আপনি কন্ট্রোলকে কল করেন nআলোক করুন, এটি জানার জন্য যথেষ্ট বোধগম্য যে বার্তা সারিটি ব্লক করা তাত্ক্ষণিক অচলাবস্থার কারণ হতে পারে - সুতরাং আপনি যদি ইতিমধ্যে ইউআই থ্রেডে থাকেন তবে এটি কেবল অবিলম্বে কোড চালায় ... যাতে আমাদের সাহায্য করে না ...
তবে কন্ট্রোল.বেগিনআইভোক আলাদাভাবে কাজ করে: এটি সর্বদা কাতারে কাজ ঠেলে দেয়, এমনকি এটি আমরা ইতিমধ্যে ইউআই থ্রেডে রয়েছি। এটি "এক মুহুর্তে" বলার সত্যিই সহজ উপায় তৈরি করে, তবে টাইমার ইত্যাদির অসুবিধা ছাড়াই (যা এখনও এখনও একই জিনিসটি করতে হবে!)।