Вызов неоднозначен между следующих методов или свойств С#
при компиляции моей программы (я компилирую ее из IDE MonoDevelop) я получаю сообщение об ошибке:
ошибка CS0121: вызов неоднозначен между следующими методами или свойства:
3 ответов
delegate { ... } - это анонимный метод, который может быть назначен любой тип делегата, в том числе ThreadStart и ParameterizedThreadStart.  Поскольку класс Thread предоставляет перегрузки конструктора с обоими типами аргументов, неоднозначно, какая перегрузка конструктора подразумевается.
delegate() { ... } (обратите внимание на скобки) - это анонимный метод, который не принимает аргументов. Его можно назначить только делегировать типы, которые не принимают аргументов, например Action или ThreadStart.
Итак, измените свой код на
Thread thread = new Thread(delegate() {
если вы хотите использовать ThreadStart перегрузка конструктора, или
Thread thread = new Thread(delegate(object state) {
если вы хотите использовать ParameterizedThreadStart перегрузка конструктора.
эта ошибка возникает, когда у вас есть метод, который имеет перегрузки и может работать с перегрузкой. Компилятор не уверен, какую перегрузку вы хотите вызвать, поэтому вам нужно явно указать ее, приведя параметр. Один из способов сделать это так:
Thread thread = new Thread((ThreadStart)delegate {
    try
    {
        Helper.CopyFolder(from, to);
        Helper.RunProgram("chown", "-R www-data:www-data " + to);
    }
    catch (Exception exception)
    {
        Helper.DeactivateThread(Thread.CurrentThread.Name);
    }
    Helper.DeactivateThread(Thread.CurrentThread.Name);
});
кроме того, вы можете использовать лямбда-выражение:
Thread thread = new Thread(() =>
{
    try
    {
        Helper.CopyFolder(from, to);
        Helper.RunProgram("chown", "-R www-data:www-data " + to);
    }
    catch (Exception exception)
    {
        Helper.DeactivateThread(Thread.CurrentThread.Name);
    }
    Helper.DeactivateThread(Thread.CurrentThread.Name);
});
thread.IsBackground = true;
thread.Priority = ThreadPriority.Lowest;
thread.Name = name;
thread.Start();