Я использую ниже код для запуска поток с несколькими параметрами: магазин нить с несколькими параметрами - WPF
public Thread StartTheThread(System.Windows.Threading.Dispatcher dispatcher, int param1, string param2)
{
Thread t = new Thread(() => Work(Maingrid.Dispatcher, param1, param2));
t.Start();
return t;
}
public delegate void delegate1(Color randomparam, Color secondparam);
public void Work(System.Windows.Threading.Dispatcher dispatcher, int param1, string param2)
{
dispatcher.Invoke(new delegate1(update), {Color.FromRgb(255, 255, 0),Color.FromRgb(170, 255, 170)});
}
public void update(Color randomparam, Color secondparam)
{
...
}
Создание нового потока обычно требует либо или метод «ThreadStart» «ParameterizedThreadStart». Метод Threadstart предназначен для потоков без параметров, а параметризованный метод threadstart - для потоков только с одним параметром (как объект). Но у меня разные параметры. Так как эти методы являются делегатами, я пытался сохранить нить, используя пользовательский делегат для вызова позже:
public delegate void starterdelegate(System.Windows.Threading.Dispatcher dispatcher, int param1, string param2);
public Thread StartTheThread(int param1, string param2)
{
Thread t = new Thread(new starterdelegate(RealStart));
...
return t;
}
Но в этом случае, компилятор возвращает эту ошибку:
«разрешение перегрузки не удалось, потому что не доступна «New» можно вызвать с помощью этих аргументов: «Public Sub New (начало как System.Threading.ParameterizedThreadStart)»: значение типа «ThreadTraining.MainWindow.starterdelegate» не может быть преобразовано в «System.Threading.ParameterizedThreadStart». ' Public Sub New (начало как System.Threading.ThreadStart) ': значение типа' ThreadTraining.MainWindow.starterdelegate 'не может быть co перенаправлен на «System.Threading.ThreadStart».
Я имею в виду, что нет проблем с запуском потока с несколькими параметрами, но когда я хочу сохранить поток t, я не хочу отправлять параметры, потому что они будут изменены до следующего запуска нить. Если я использую метод ParameterizedThreadStart и не отправляю параметры, компилятор вызовет ошибку подписи. Если я не использую один из необходимых методов, компилятор вызовет ошибку с ошибкой разрешения перегрузки.
Я даже не знаю, почему это:
Thread t = new Thread(() => Work(Maingrid.Dispatcher, param1, param2));
работает в первую очередь. Как параметр «новая тема» совместим с методами? Я нашел эту строку кода на этой странице: https://stackoverflow.com/a/1195915/2770195
Любой совет?
удалить все это и использовать 'async/await'.Кроме того, что бы вы ни делали, вы должны использовать DataBinding. –
Я действительно не понимаю, чего вы хотите достичь. –
@HighCore Что значит? Я не понял. – MuhsinFatih