কলাম থ্রেড STA হতে হবে, কারণ অনেক ইউআই উপাদান এই WPF প্রয়োজন

আমি wpf Toolkit দ্বারা প্রদত্ত মেসবসবক্স ব্যবহার করছি। এবং আমি ত্রুটি পেতে

কলিং থ্রেড STA হতে হবে, কারণ অনেক ইউআই উপাদান এই প্রয়োজন

new Thread(new ThreadStart(delegate
{
    MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
})).Start();

এই ক্ষেত্রে আমি কিভাবে এপার্টমেন্টস্টেটের সেট করতে পারি?

সম্পাদনা: আমি wpf টুলকিট এর MessageBox নিয়ন্ত্রণ ব্যবহার করে একটি modeless বার্তাবক্স প্রদর্শন করার চেষ্টা করছি। এখন পর্যন্ত আমার কাছে কোড আছে:

void SomeFunction()
{
// calls to some UI, and processing and then

var th = new Thread(new ThreadStart(delegate
                                        {
                                           MessageBox.Show("Opeartion could not be completed. Please try again.",
                                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                                        }));

                                        th.SetApartmentState(ApartmentState.STA);
                                        th.Start();
                                    }
}
0
কারণ আমি একটি নতুন থ্রেড শুরু করতে চাই কারণ, বার্তা বাক্সে modeless হওয়া উচিত।
যোগ লেখক xaria, উৎস
আপনি একটি ডায়ালগ বক্স দেখানোর জন্য কেন একটি নতুন থ্রেড শুরু করবেন? এটি আপনার বিদ্যমান UI থ্রেড সংকেত আরো ভাল হবে এবং একটি যে এটি দেখান আছে। আপনার সমস্যা স্বয়ংক্রিয়ভাবে খুব সমাধান হবে।
যোগ লেখক Jon, উৎস
wpf "> stackoverflow.com/questions/4183622/… এর জন্য অনেক ui উপাদান প্রয়োজন।
যোগ লেখক Klaus78, উৎস
@Jon আমি পুরোপুরি একমত, একটি বার্তা বাক্স প্রদর্শন করতে একটি নতুন থ্রেড স্পিন বন্ধ করার কোন কারণ নেই। এমনকি যদি এটি একটি ডায়ালগ যা এমন থ্রেডটি লক করতে পারে তবে আমি এখনও একটি নতুন থ্রেডকে সুপারিশ করবো না - আমি ডিসপ্লেচার ব্যবহার করার পরামর্শ দিই।
যোগ লেখক erodewald, উৎস

3 উত্তর

এ সম্পাদিত

According to MSDN There exists builtin modal MessageBox in wpf but if you want to use Modeless MessageBox then you have to create custom window and then show it. Creating, showing and and returning value from custom modeless MessageBox is not very tough. You can see this link

শুধুমাত্র বার্তাবক্সের জন্য আলাদা আলাদা থ্রেড ব্যবহার করা বিজ্ঞতার কাজ নয়। যাইহোক আপনি নিম্নলিখিত দ্বারা একক অ্যাপার্টমেন্ট রাষ্ট্র সেট করতে পারেন ...

  Thread th = new Thread(new ThreadStart(delegate
  {
    MessageBox.Show("Opeartion could not be completed. Please try again.", "Error",MessageBoxButtons.OK,MessageBoxImage.Error);
  }));

  th.ApartmentState = ApartmentState.STA;
  th.Start();
0
যোগ
ডকুমেন্টেশনটি বলছে যে স্টুডেন্ট স্টেটটি থ্রেড স্টার্ট আগে সেট করতে হবে। তাই আমি বেনামী ফাংশন ব্যবহার করতে পারবেন না মানে?
যোগ লেখক xaria, উৎস
আমি এখনও ত্রুটি পেতে: Type 'System.InvalidOperationException' টাইপের একটি অপ্রকাশিত ব্যতিক্রম WindowsBase.dll এ ঘটেছে অতিরিক্ত তথ্য: কলিং থ্রেড এই অবজেক্টটি অ্যাক্সেস করতে পারে না কারণ একটি ভিন্ন থ্রেড এটি মালিকানাধীন
যোগ লেখক xaria, উৎস
আমার সম্পাদনা দেখুন দয়া করে
যোগ লেখক xaria, উৎস
@ পলব আমি বার্তাবক্সে এটি পেয়ে যাচ্ছি। বিবৃতি বিবৃতি। আমি অনুমান আপনি system.Windows.MessageBox ব্যবহার করছেন। আমি wpf টুলকিট বার্তাবক্স ব্যবহার করতে চাই। আপনি যে সঙ্গে চেষ্টা করেছেন?
যোগ লেখক xaria, উৎস
@ জারিয়া শুরু করার আগে আপনি অ্যাপার্টমেন্ট স্টেট সেট করতে পারেন। সম্পাদিত উত্তর চেক করুন
যোগ লেখক Md Kamruzzaman Sarker, উৎস
@ জারিয়া যা আপনি ব্যবহার করেন? আপনি পদ্ধতি Invoker ব্যবহার করতে হবে। বস্তু এবং অবজেক্ট (নিয়ন্ত্রণ) নাম এবং প্রকারের অ্যাক্সেসের জন্য লিখতে কোডটি দেখান।
যোগ লেখক Md Kamruzzaman Sarker, উৎস
আমি আপনার দেওয়া কোড চেক করেছি। এর কোনও সমস্যা নেই। এটা কোন ভুল ছাড়া আমার উপর চালানো। আপনি জানেন যে কোডটি কোন লাইন ভুল করে এবং তারপর কোডের যে লাইন দেয়। আমি মনে করি এটি এই অংশে ত্রুটি দেয়/কিছু UI কল করে, এবং তারপর প্রক্রিয়া এবং তারপর
যোগ লেখক Md Kamruzzaman Sarker, উৎস
@ কোডিংব্যারফিল্ড: এবং কিভাবে তার নতুন থ্রেড STA হতে হবে?
যোগ লেখক Grzegorz W, উৎস
মনে রাখবেন আপনি শুধুমাত্র প্রত্যেকটি থ্রেডের জন্য একবার এপার্টমেন্ট স্টেট সেট করতে পারবেন। আমি এটি সেট করে সেট করা হবে: [STAThread] পাবলিক স্ট্যাটিক খালি মেন ()
যোগ লেখক CodingBarfield, উৎস

ইউজার ইন্টারফেসের ফ্রেমগুলির মতো, অনেক উইন্ডোজ ফরম যেমন, wpf একটি একক থ্রেডিং মডেলও চাপিয়ে দেয়, যার মানে আপনি শুধুমাত্র একটি নির্দিষ্ট ডেরিভেটিভ ডিসপ্যাচারঅবইজড থ্রেড অ্যাক্সেস করতে পারেন যা এটি তৈরি করে। ইন্টারফেস ISynchronizeInvoke প্রয়োগ করে উইন্ডোজ ফরম কন্ট্রোলগুলিতে, এই ইন্টারফেসটি অন্য থ্রেড থেকে নিয়ন্ত্রণ অ্যাক্সেস করার জন্য আমরা একটি সাধারণ থ্রেড সিঙ্ক্রোনাইজেশন ব্যবহার করতে পারি যেমন অ্যাকোভ এবং বেনইন ইনকোওচ পদ্ধতির একটি সেট প্রকাশ করে। WPF- এ আমরা এমন ধরনের জিনিসও আছে, কিন্তু এই অপারেশনগুলি Dispatcher নামক একটি ক্লাসে জড়িত, Dispatcher wpf হল এই ধরনের থ্রেড সিঙ্ক্রোনাইজেশন মডেলের অনুমতি দেয়।

কলার একটি ভিন্ন থ্রেড যখন টেক্সটবক্স। পাঠ্য সম্পত্তি পরিবর্তন কিভাবে একটি উদাহরণ:

// Resets textbox text from another thread
textBox.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
    textBox.Text = "New text";
}));
0
যোগ
// enable unit test to mock a dispatcher
var dispatcher = Dispatcher.CurrentDispatcher;
if (Application.Current != null)
{
   //use the application dispatcher if running from the software
    dispatcher = Application.Current.Dispatcher;
}

if (dispatcher != null)
{
   //delegate the operation to UI thread.
    dispatcher.Invoke(
        delegate
        {
            MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
        });
}
0
যোগ