সিঙ্ক্রোনাইজেশন কনটেক্সট আমাদের বিভিন্ন থ্রেড থেকে ইউআই আপডেট করার একটি উপায় সরবরাহ করে (সমকালীনভাবে প্রেরণ পদ্ধতিটির মাধ্যমে বা পোস্ট পদ্ধতির মাধ্যমে অ্যাসিক্রোনারলি)।
নিম্নলিখিত উদাহরণটি একবার দেখুন:
private void SynchronizationContext SyncContext = SynchronizationContext.Current;
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(Work1);
thread.Start(SyncContext);
}
private void Work1(object state)
{
SynchronizationContext syncContext = state as SynchronizationContext;
syncContext.Post(UpdateTextBox, syncContext);
}
private void UpdateTextBox(object state)
{
Thread.Sleep(1000);
string text = File.ReadAllText(@"c:\temp\log.txt");
myTextBox.Text = text;
}
সিঙ্ক্রোনাইজেশন কনটেক্সট.কালীন ইউআই থ্রেডের সিঙ্ক প্রসঙ্গটি ফিরিয়ে দেবে। আমি এটা কিভাবে জানি? প্রতিটি ফর্ম বা ডাব্লুপিএফ অ্যাপ্লিকেশন শুরুতে, প্রসঙ্গটি ইউআই থ্রেডে সেট করা হবে। আপনি যদি একটি ডাব্লুপিএফ অ্যাপ্লিকেশন তৈরি করেন এবং আমার উদাহরণটি চালান, আপনি দেখতে পাবেন যে আপনি যখন বোতামটি ক্লিক করবেন তখন এটি প্রায় 1 সেকেন্ডের জন্য ঘুমায়, তবে এটি ফাইলটির সামগ্রী দেখিয়ে দেবে। আপনি এটি আশা করতে পারেন না কারণ আপডেটটেক্সটবক্স পদ্ধতিটির কলার (যা ওয়ার্ক 1) একটি থ্রেডে পাস হওয়া একটি পদ্ধতি, সুতরাং এটি সেই থ্রেডটি ঘুমানো উচিত যা মূল UI থ্রেড নয়, না! যদিও ওয়ার্ক 1 পদ্ধতিটি কোনও থ্রেডে পাস করা হয়েছে তবে লক্ষ্য করুন যে এটি কোনও বস্তু গ্রহণ করে যা সিঙ্ক কনটেক্সট। আপনি যদি এটি তাকান, আপনি দেখতে পাবেন যে আপডেটটেক্সটবক্স পদ্ধতিটি সিঙ্ককন্টেক্সট.পস্ট পদ্ধতির মাধ্যমে কার্যকর করা হয়েছে, ওয়ার্ক 1 পদ্ধতি নয়। নিম্নলিখিতটি একবার দেখুন:
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread.Sleep(1000);
string text = File.ReadAllText(@"c:\temp\log.txt");
myTextBox.Text = text;
}
শেষ উদাহরণ এবং এটি একটি কার্যকর করে। উভয়ই ইউআই-কে কাজ করার সময় অবরুদ্ধ করে না।
উপসংহারে, সিঙ্ক্রোনাইজেশন কনটেক্সটকে থ্রেড হিসাবে ভাবেন। এটি কোনও থ্রেড নয়, এটি একটি থ্রেডকে সংজ্ঞায়িত করে (নোট করুন যে সমস্ত থ্রেডের একটি সিঙ্ক কনটেক্সট নেই) যখনই আমরা কোনও ইউআই আপডেট করার জন্য পোস্ট বা প্রেরণ পদ্ধতিটিতে কল করি তখন এটি মূল ইউআই থ্রেড থেকে সাধারণত ইউআই আপডেট করার মতো। যদি কোনও কারণে, আপনাকে আলাদা থ্রেড থেকে ইউআই আপডেট করতে হয়, তা নিশ্চিত করুন যে থ্রেডটির মূল ইউআই থ্রেডের সিঙ্ককন্টেক্সট রয়েছে এবং কেবলমাত্র যে পদ্ধতিটি কার্যকর করতে চান তার সাথে এটিতে প্রেরণ বা পোস্ট পদ্ধতিতে কল করুন এবং আপনি সবাই সেট।
আশা করি এটি আপনাকে সহায়তা করবে, সাথী!