অবৈধ ক্রস থ্রেড অপারেশন ব্যতিক্রম কোন সমাধান?

যখন আপনি C# এ তথ্য বাঁধেন, তখন থ্রেড ডেটা পরিবর্তন করে নিয়ন্ত্রণটিও পরিবর্তন করে দেয়। কিন্তু যদি এই থ্রেডটি নিয়ন্ত্রণ না করা হয় তবে আপনি একটি অবৈধ ক্রস থ্রেড অপারেশন ব্যতিক্রম পাবেন।

এই প্রতিরোধ এইভাবে আছে কি?

0
ro fr hi

5 উত্তর

আপনি কিছু মত করতে সক্ষম হওয়া উচিত:

if (control.InvokeRequired)
{
    control.Invoke(delegateWithMyCode);
}
else
{
    delegateWithMyCode();
}

InvokeRequired কন্ট্রোলগুলিতে একটি সম্পত্তি যা কিনা আপনি সঠিক থ্রেডে দেখতে চান, তারপর আহ্বানটি সঠিক থ্রেডে প্রতিনিধিকে আমন্ত্রণ জানান।

আপডেট: আসলে, আমার শেষ কাজের সময়ে আমরা এই রকম কিছু করেছি:

private void SomeEventHandler(Object someParam)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
    }

    // Regular handling code
}

যা অন্য ব্লকের জন্য প্রয়োজনীয়তা সরিয়ে দেয় এবং ধরনের কোড সংহত করে।

0
যোগ

যেহেতু আমার কাছে পরীক্ষার ক্ষেত্রে নেই তাই আমি এই সমাধানটি গ্যারান্টি দিতে পারি না, কিন্তু আমার মনে হয় যে একই রকম একটি দৃশ্যকল্প যা বিভিন্ন থ্রেডের অগ্রগতি বার আপডেট করার জন্য ব্যবহৃত হয়েছে (একটি প্রতিনিধি ব্যবহার করুন) এখানে উপযুক্ত হবে।

public delegate void DataBindDelegate();
public DataBindDelegate BindData = new DataBindDelegate(DoDataBind);

public void DoDataBind()
{
    DataBind();
}

যদি ডাটা বাঁধাই একটি নির্দিষ্ট থ্রেড দ্বারা করা প্রয়োজন, তারপর যে থ্রেড কাজ করবেন!

0
যোগ

যদি থ্রেড কলটি "অবৈধ" (অর্থাৎ DataBind কলে এমন কন্ট্রোলকে প্রভাবিত করে যা থ্রেডে তৈরি করা হয় না তবে তা থেকে বলা হচ্ছে) তাহলে আপনাকে একটি প্রতিনিধি তৈরি করতে হবে যাতে ডেটাব্যান্ডের সিদ্ধান্ত / প্রস্তুতি সম্পন্ন না হয় নিয়ন্ত্রণ-তৈরি থ্রেড, তাদের কোনও ফলপ্রসূ পরিবর্তন (অর্থাৎ ডাটা বিন্ড ()) হবে।

আপনি কর্মী থ্রেড থেকে আমার কোডটি যেমন কল করবেন:

this.BindData.Invoke();

এটি তখন মূল থ্রেডটি বাঁধাই করার জন্য সৃষ্টি করবে, যা (এটি ধারণ করে যে থ্রেডটি নিয়ন্ত্রণ করে) কাজ করা উচিত।

0
যোগ

যদি ডাটা সংশোধন খুব বেশি সময় নেয় না (অর্থাত, যদি পটভূমি থ্রেডের মূল উদ্দেশ্যটি প্রকৃত তথ্য পরিবর্তন না হয়), তাহলে বিভাগটি এমন একটি বিভাগে স্থানান্তরের চেষ্টা করুন যা প্রতিনিধিকে ডেটাতে পরিবর্তন করে এবং প্রতিনিধিকে আমন্ত্রণ জানাতে

যদি প্রকৃত ভারী কাজ তথ্য উপর থাকে, আপনি সম্ভবত ব্যাকগ্রাউন্ড থ্রেড প্রেরণ করতে এই ডেটা একটি গভীর অনুলিপি তৈরি করতে হবে, যা পুনরায় সংযোজনের মাধ্যমে প্রসেসেড তথ্য UI থ্রেমে ফিরে পাঠাতে হবে।

আপনি কেবলমাত্র সরাতে করতে পারেন যা ডেটা ফাংশনে ডেটা পরিবর্তন করে (যেহেতু ডেটা পরিবর্তন হচ্ছে নিয়ন্ত্রণ আপডেট ট্রিগার করে)। অন্য যেকোনও, অতিরিক্ত কিছু লিখতে হবে না।

0
যোগ

WPF এবং সিলভারলাইটে বাইন্ডিং পরিকাঠামোটি ইউআই থ্রেডে সুইচিংয়ের যত্ন নেয়।

0
যোগ