2 বা 3 সেকেন্ডের জন্য কীভাবে একটি বিলম্ব যুক্ত করবেন [বন্ধ]


129

আমি সি # তে কোনও প্রোগ্রামে কীভাবে বিলম্ব যুক্ত করতে পারি?


2
এটি করার বিভিন্ন উপায় রয়েছে, তবে আপনাকে কেন একটি বিলম্ব যোগ করার দরকার আছে? আমরা যদি জানতাম তবে এটি করার সবচেয়ে উপযুক্ত উপায়টি আমরা প্রস্তাব করতে সক্ষম হব।
ক্রিসএফ

3
এই প্রশ্নটি আশাহীনভাবে হ'ল থ্রেড.স্লিপ () টি সুপারিশ করার জন্য নিচে নথিভুক্ত।
হ্যানস প্যাস্যান্ট

1
কেবলমাত্র স্পষ্টতার জন্য, আমি এই প্রশ্নটি বন্ধ করার পক্ষে ভোট দিয়েছি কারণ আপনি কারও পক্ষে একটি ভাল, মানের উত্তর দেওয়ার জন্য যথেষ্ট বিশদ সরবরাহ করেন নি। আপনি ঠিক কী করতে চাইছেন সে সম্পর্কে যদি আপনি আরও কিছু বিশদ যুক্ত করেন তবে আমি এটি একটি বৈধ প্রশ্ন হিসাবে আবার খুলতে ইচ্ছুক। খুব শীঘ্রই ভোটদান বন্ধ করা নিম্ন মানের মানের প্রশ্নের "শব্দ" এর বন্যার প্রতিরোধের একটি উপায়। একবার আপনি আরও বিশদ যুক্ত করার পরে, আমাকে একটি মন্তব্য দিন এবং / অথবা এটি আবার চালু করার জন্য একটি মোড ফ্ল্যাগ করুন।
কোডি গ্রে

14
এই প্রশ্নটি বন্ধ করার জন্য খারাপ সিদ্ধান্ত। এটি একটি প্রশ্ন এবং প্রকৃতিগতভাবে জেনেরিক হওয়া এটি ঠিক। আমি এটা পুরোপুরি বুঝতে পেরেছি।
ব্যবহারকারী 2430797

5
তবুও আরেকটি প্রশ্ন আমি সন্ধান করছিলাম, এমন একটি প্রশ্নের উত্তর দিয়েছিলাম যা বিনা কারণে বন্ধ ছিল।
গ্লেন মেইনার্ড

উত্তর:


176

আপনি যেমন Thread.Sleep()ফাংশন ব্যবহার করতে পারেন

int milliseconds = 2000;
Thread.Sleep(milliseconds);

যা সম্পূর্ণভাবে 2 সেকেন্ডের জন্য বর্তমান থ্রেডের সম্পাদন বন্ধ করে দেয়

সম্ভবত সবচেয়ে উপযুক্ত পরিস্থিতিটি Thread.Sleepহ'ল আপনি যখন অন্য থ্রেডে অপারেশনগুলিকে বিলম্ব করতে চান, মূল থেকে পৃথক:

 MAIN THREAD        --------------------------------------------------------->
 (UI, CONSOLE ETC.)      |                                      |
                         |                                      |
 OTHER THREAD            ----- ADD A DELAY (Thread.Sleep) ------>

অন্যান্য পরিস্থিতিতে (যেমন কিছু সময়ের পরে অপারেশন শুরু করা ইত্যাদি) কোডির উত্তর পরীক্ষা করে দেখুন ।


13
থিয়েড ব্যবহার করা থেকে বিরত থাকুন ঘুমের কারণ সময়সীমা শেষ না হওয়া অবধি এটি বর্তমান থ্রেডকে কিছু না করা পুরোপুরি অবরুদ্ধ করে দেবে।
মোহাম্মদ সোইল্লাম

7
@ মোহাম্মদ: হ্যাঁ, অবশ্যই তা পুরোপুরি অবরোধ করে ফেলবে। তবে কখনও কখনও এটি কার্যকর হতে পারে ... এটি
ওপির যা

12
যেহেতু আমি একটি নতুন উত্তর পোস্ট করতে পারি না, তাই আমি মন্তব্য করতে চাই - আপনি যদি এটি প্রোগ্রামটি ব্লক করতে না চান তবে আপনি ব্যবহার করতে পারেন await Task.Delay(milliseconds)। এটি আমার জন্য কাজ করেছে :)
সাইয়ানগার্ল

আমার ক্ষেত্রে আমি অপেক্ষারত ব্যবহার করতে পারিনি কারণ আমাকে প্রোগ্রামামের একটি অংশ থেকে ডাকা হয়েছিল যা অন্য কেউ লিখেছেন। এটি অপেক্ষমান নয় তবে আমি যদি "হ্যাং" করি তবে আমার জিনিসগুলি বন্ধ হওয়ার আগে আমি 10 সেকেন্ডের জন্য কাজ করতে পারি। 2 সেকেন্ড ঘুমানো কবজির মতো কাজ করে;) তাই কিছু ক্ষেত্রে এইভাবে হয়।
একাদশ

@ মোহাম্মদএল সাইয়েদ: উত্তরটি নির্ভরশীল। এটি সমস্ত ব্যবহারের অভিপ্রায়ের উপর নির্ভর করে। আমার ক্ষেত্রে হিসাবে, ডাটাবেসের মধ্যে সন্নিবেশ করানোর সময় সূচির সীমাবদ্ধতা এড়াতে আমাকে ঠিক থ্রেডটি 0.6 সেকেন্ডের জন্য ঘুমাতে হবে।
গানওয়ান্ডারার

61

২-৩ সেকেন্ডে অন্তর সেট করে টাইমার ব্যবহার করুন।

আপনি কোন ধরণের অ্যাপ্লিকেশন লিখছেন তার উপর নির্ভর করে আপনার কাছে বেছে নিতে তিনটি আলাদা বিকল্প রয়েছে:

  1. System.Timers.Timer
  2. System.Windows.Forms.Timer
  3. System.Threading.Timer

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

টাইমারগুলি ছাড়াও এবং Sleepআপনি এটি ব্যবহার করতে পারেন Task.Delayযা অ্যাসিনক্রোনাস ভার্সন Sleepপ্রক্রিয়াকরণ ইভেন্টগুলি থ্রেডকে ব্লক করে না (যদি সঠিকভাবে ব্যবহৃত হয় - এটির সাথে অসীম ঘুমে রূপান্তর করবেন না .Wait())।

 public async void ClickHandler(...)
 {
      // whatever you need to do before delay goes here         

      await Task.Delay(2000);

      // whatever you need to do after delay.
 }

একই await Task.Delay(2000)একটি ব্যবহার করা যেতে পারে Mainএকটি কনসোল আবেদন পদ্ধতি আপনি C # এর 7.1 (ব্যবহার এসিঙ্ক দুটিই MSDN ব্লগে প্রধান )।

দ্রষ্টব্য: অপারেশনটি বিলম্ব করার সাথে সাথে Sleepজাতিদের পরিস্থিতি এড়ানো সুবিধা রয়েছে যা সম্ভাব্যভাবে টাইমারগুলি / দিয়ে একাধিক ক্রিয়াকলাপ শুরু করে Delay। দুর্ভাগ্যক্রমে ইউআই-ভিত্তিক অ্যাপ্লিকেশন হিমায়িত গ্রহণযোগ্য নয় তাই আপনি যদি একাধিক বিলম্ব শুরু করেন (তবে এটি যদি একটি বোতাম ক্লিক দ্বারা উদ্দীপিত হয়) তবে কী ঘটবে সে সম্পর্কে আপনাকে ভাবতে হবে - এই জাতীয় বোতামটি নিষ্ক্রিয় করা, বা টাইমার / টাস্ক বাতিল করা বা নিশ্চিত হওয়াতে বিলম্ব করার বিষয়টি বিবেচনা করুন অপারেশন নিরাপদে একাধিকবার করা যেতে পারে।


5
যদি এটি কনসোল অ্যাপ্লিকেশন হয় তবে Thread.Sleepসতর্কতাটি ততটা গুরুত্বপূর্ণ নয়।
মের্লিন মরগান-গ্রাহাম

1
চতুর্থ টাইমার রয়েছে: সিস্টেম. ওয়েবে.ইউআই.টাইমার , একটি এএসপি.এনইটি উপাদান যা নিয়মিত বিরতিতে অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস ওয়েব পেজ পোস্টব্যাকগুলি সম্পাদন করে।
ডেভিড

1
শীর্ষ উত্তর হওয়া উচিত। যদি এটি টাইমার এক ব্যবহার করার জন্য একটি উদাহরণ থাকত, তাহলে আরো ভোট পেতে হবে ...
Mercutio

কডি গ্রে, আপনি await Task.Delay()সংস্করণ যুক্ত করতে পারেন এবং ইনলাইন মন্তব্য করতে পারেন যে কনসোল অ্যাপটি সম্ভবত সম্ভবত ব্যবহার করতে চায়Sleep (অ-অ্যাসিঙ্ক Main) বা Delay( Main
অ্যাসিঙ্ক

1
@ কোডি গ্রে সম্পন্ন হয়েছে।
আলেক্সি লেভেনকভ


6
System.Threading.Thread.Sleep(
    (int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);

বা usingবিবৃতি সহ:

Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);

আমি এটিকে 1000 * numSeconds(বা সহজভাবে 3000) অগ্রাধিকার দিচ্ছি কারণ এটি এর Thread.Sleepআগে আরও ব্যবহার না করে এমন ব্যক্তির সাথে কী ঘটছে তা আরও স্পষ্ট করে তোলে । এটি আপনার উদ্দেশ্যকে নথিভুক্ত করে।


2
1000 * এর বেশি টাইমস্প্যানের জন্য +1
লেফটি

.NET 4 এর পরে আপনি Thread.Sleep(TimeSpan)সরাসরি কোনও কন্ট্রোল না করে সরাসরি ব্যবহার করতে পারেন ।
হল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.