Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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}"Diameter,Diameter*Math.PI);
   }
       Здесь используется делегат, определяющий тип ThreadStart, который определяет метод, необходимый для выполнения потока: Вычислять, при котором вычисляется окружность окружности диаметром 0,5, и вывод. Это самый простой пример многопоточности, что во многих случаях достаточно




ParameterThreadStart:
ParameterThreadStart определяется как void ParameterizedThreadStart (состояние объекта), и функция запуска потока, определённого с помощью этого делегата, может принимать входный параметр, например:



ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate)
Thread thread=новая Thread() ;
Тема. Старт (0,9);
public void Вычислить (object arg)
{
двойной диаметр=двойной (arg);
Console.Write ("Площадь окружности с диаметром {0} равна {1}"Diameter,Diameter*Math.PI);
}

Метод Calculate имеет параметр типа объекта, хотя параметр только один, и это тоже тип объекта, и его всё равно нужно преобразовывать при его использовании, но, к счастью, параметры могут быть, и объединив несколько параметров в класс, а затем передавая экземпляр этого класса как параметр, можно добиться передачи нескольких параметров. Как что:





класс AddParams
{
    Публичные INT 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 = новый поток(новый ParameterizedThreadStart(Add));
      t.Start(ap);
      Console.ReadLine();
    }

    #region Метод добавления
    статический вакуум 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