উইন্ডোজ স্টোরের জন্য নেট .NET এ থ্রেড.স্লিপ রিপ্লেসমেন্ট


98

থ্রেড.স্লিপ উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলির জন্য .NET এ সমর্থিত বলে মনে হচ্ছে না।

উদাহরণস্বরূপ, এটি

System.Threading.Thread.Sleep(1000);

কোনও নেট নেট ফ্রেমওয়ার্ক (2.0, 3.5, 4.0, 4.5) টার্গেট করার সময় সংকলন করা হবে, তবে উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলির জন্য .NET (বা একটি বহনযোগ্য ক্লাস লাইব্রেরিতে যা 4.5 এবং স্টোর উভয়কেই লক্ষ্য করে) টার্গেট করার সময় নয়।

System.Threading.Tread এখনও আছে, এটির ঘুম পদ্ধতি নেই।

আমার অ্যাপ্লিকেশনটিতে কয়েক সেকেন্ডের জন্য আমাকে কিছুটা বিলম্ব করা দরকার, সেখানে কি কোনও উপযুক্ত প্রতিস্থাপন রয়েছে?

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


4
উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলি বিবেচনা করে ইউআই হিমায়িত করতে সক্ষম হবে না বলে মনে করা হচ্ছে (সবকিছুই অ্যাসিঙ্ক বলে মনে করা হয়) এটি বোঝা যায় যে এটি সমর্থিত নয়।
সত্যই

4
আপনার কি ইভেন্টস বা Monitorক্লাস আছে? Waitএকটি সময় নির্ধারণের জন্য ঘুমকে অনুকরণ করার জন্য আপনি পদ্ধতিটি ব্যবহার করতে পারেন ।
টিউডর

এটি কি Apptivate.ms এর জন্য? : 3
ইটারঅফকোড

4
Thread.Sleepব্যাড টেকের ডাস্টবিনে বিতাড়নের জন্য হ্যাঁ।
ব্যয়কারী

উত্তর:


203

উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলি অ্যাসিঙ্ক্রোনিকে আলিঙ্গন করে - এবং একটি "অ্যাসিনক্রোনাস বিরাম" সরবরাহ করে Task.Delay। সুতরাং একটি অ্যাসিক্রোনাস পদ্ধতির মধ্যে, আপনি লিখবেন:

await Task.Delay(TimeSpan.FromSeconds(30));

... বা আপনি যে বিলম্ব চান। অ্যাসিক্রোনাস পদ্ধতিটি 30 সেকেন্ড পরে চলতে থাকবে, তবে থ্রেডটি ব্লক করা হবে না , ঠিক যেমন সমস্ত awaitএক্সপ্রেশন হিসাবে ।


4
দুর্ভাগ্যক্রমে, টাস্ক.ডলে কোনও পোর্টেবল ক্লাস লাইব্রেরিতে .NET 4.5 + store + WP7 টার্গেট করার সময় সমর্থিত বলে মনে হচ্ছে না .. আমার ধারণা আমি এটি প্ল্যাটফর্মের নির্দিষ্ট ক্লাসে স্থানান্তর করব।
সর্বোচ্চ

4
@ ম্যাক্স: না, কারণ এটি .NET 4.5 এর আগে উপস্থিত ছিল না। আইআইআরসি, ডাব্লুপি 7 নিজেই কোনও টিপিএল সমর্থন নেই। (আমি ভুল হতে পারি ...)
জন স্কিটি

4
প্রয়োজনে আপনি মোকাবেলা করতে .RunSynchronously()পারেন।
শুভনোমাদ

4
@RAM আচ্ছা Thread.Sleep হয় , .NET 3.5 সমর্থিত তাই প্রশ্ন প্রযোজ্য নয়। সন্দেহ নেই যে আপনার একটি প্রশ্ন আছে তবে এটি এটির মতো বলে মনে হচ্ছে না। দয়া করে tinyurl.com/stack- হিন্টগুলি পড়ুন এবং তারপরে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন।
জন স্কিটি

4
@ র‌্যাম: আপনার মন্তব্য থেকে অনুমান করার জন্য আমি কীভাবে বোঝাচ্ছিলাম তা আমি নিশ্চিত নই। ডাব্লুপিএফ এবং অ্যানিমেশন সম্পর্কে ইতিমধ্যে এসও তে প্রচুর অনুরূপ প্রশ্ন রয়েছে।
জন স্কিটি

46

স্পষ্টত উল্লেখ করার জন্য ঘৃণা করুন তবে ক্ষেত্রে যে কেউ একটি লাইন চেয়েছিল System.Threading.Tasks.Task.Delay(3000).Wait()


20

আমার ঠিক একই সমস্যা ছিল এবং আমি আপনার সাথে ভাগ করতে চেয়েছিলাম এমন একটি আকর্ষণীয় সমাধান পেয়েছি। আপনি যদি সত্যিই থ্রেডটি ব্লক করতে চান তবে আমি এটি এর মতো করব ("ব্রাতনকে" স্লিম "ইঙ্গিতের জন্য ধন্যবাদ):

// `waitHandle.Set` is never called, so we wait always until the timeout occurs
using (var waitHandle = new ManualResetEventSlim(initialState: false))
{
    waitHandle.Wait(TimeSpan.FromSeconds(5));
}

এটি পোর্টেবল কোডিংয়ের জন্য সেরা উত্তর।
zezba9000

এর "স্লিম" সংস্করণটি ব্যবহার করুন।
ব্র্যানন

11

মেইনপেজ.এক্স্যামল সি

public MainPage()
{
  this.InitializeComponent();
  this.WaitForFiveSeconds();
}

private async void WaitForFiveSeconds()
{
  await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(5));
  // do something after 5 seconds!
}

-7

এভার ব্যবহারের প্রায় কোনও কারণ নেই (পরীক্ষার উদ্দেশ্যে ব্যতীত) Thread.Sleep()

IF (এবং কেবলমাত্র যদি) আপনার কাছে একটি থ্রেড ঘুমানোর জন্য প্রেরণের খুব ভাল কারণ থাকে তবে আপনি যাচাই করতে চাইতে পারেন Task.Delay(), যা আপনি একটি নির্দিষ্ট সময়ের জন্য "অপেক্ষা" করতে অপেক্ষা করতে পারেন। যদিও থ্রেড বসে থাকা এবং কিছুই না করা কখনই ভাল ধারণা নয়। খারাপ অনুশীলন ...


9
আমি একমত নই থ্রেডটি যদি একটি ব্যাকগ্রাউন্ড থ্রেড হয় এবং ঘুম কম হয় তবে এটি টাইমার ব্যবহারের চেয়ে কয়েক মিলি সেকেন্ডের জন্য ঘুমানো বেশি দক্ষ।
জেসন স্টিল

4
এবং কখনও কখনও আপনাকে পরিণতির কর্তৃত্বের চিত্র বলেও সত্ত্বেও এটি করতে বলা হয়;)
জর্দান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.