Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 19083|Відповідь: 0

[Джерело] ThreadStart і ParameterizedThreadStart відрізняються

[Копіювати посилання]
Опубліковано 14.11.2016 10:25:44 | | |
ThreadStart:

Делегат ThreadStart визначається як void ThreadStart(), що означає, що виконаний метод не може мати параметрів.
ThreadStart threadStart=new ThreadStart(Обчислити);
Thread thread=new Thread(threadStart);
Тема. Start();
Обчислити публічну порожнечу()
   {
подвійний діаметр=0,5;
Console.write("Площа кола з діаметром {0} дорівнює {1}"Діаметр, Діаметр*Math.PI);
   }
       Тут ми використовуємо делегат, який визначає тип ThreadStart, що визначає метод, необхідний для виконання: Обчислення, при якому обчислюється окружність кола діаметром 0,5, і виводить. Це є найпростішим прикладом багатопотокності, що в багатьох випадках є достатнім




ParameterThreadStart:
ParameterThreadStart визначається як void ParameterizedThreadStart (стан об'єкта), і функція запуску потоку, визначеного за допомогою цього делегата, може приймати вхідний параметр, наприклад:



ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate)
Thread thread=нова нитка() ;
Тема. Старт (0,9);
public void Обчислити (object arg)
{
подвійний діаметр=подвійний (arg);
Console.write("Площа кола з діаметром {0} дорівнює {1}"Діаметр, Діаметр*Math.PI);
}

Метод Calculate має параметр типу об'єкта, хоча є лише один параметр, і це також тип об'єкта, і його все одно потрібно конвертувати при використанні, але, на щастя, параметри можуть існувати, і комбінуючи кілька параметрів у клас, а потім передаючи екземпляр цього класу як параметр, можна досягти передачі кількох параметрів. Наприклад, що саме:





клас AddParams
{
    Публічні міжнародні A, B;

    public AddParams (int numb1, int numb2)
    {
      a = numb1;
      b = numb2;
    }
}
#endregion

Програма класу
{
    static void Main(string[] args)
    {
      Console.WriteLine ("***** Додавання за допомогою об'єктів потоку *****");
      Console.WriteLine("ID потоку в Main(): {0}",
        Thread.CurrentThread.ManagedThreadId);

      AddParams ap = нові AddParams(10, 10);
      Потік t = новий Thread(new ParameterizedThreadStart(Add));
      т.Старт (ap);
      Console.ReadLine();
    }

    #region Метод додавання
    static void Add(дані об'єкта)
    {
      якщо (дані — це AddParams)
      {
        Console.WriteLine("ID потоку в Main(): {0}",
          Thread.CurrentThread.ManagedThreadId);

        AddParams ap = (AddParams)data;
        Console.WriteLine("{0} + {1} — {2}",
          ap.a, ap.b, ap.a + ap.b);
      }
    }
    #endregion
}
}




Попередній:.net/c# Переглядати аватари користувачів, захоплювати аватари QQ
Наступний:.net/c# обчислює вік автомобіля водія
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com