Поток WPF запускает последовательность методов параллельно - PullRequest
0 голосов
/ 04 мая 2020

Я стараюсь каждый день узнавать больше C# и создаю маленький проект WPF. Я не хочу копировать весь файл CS. Я пытаюсь объяснить это более простым способом: у меня есть windows с одной кнопкой и множеством методов.

private void BtnStart(object sender, RoutedEventArgs e)
{
    Methode1();
    Methode2();
    Methode3();
    Methode4();
    Methode5();
]

Методы, например, такие (Содержание методов не имеет значения. Может быть, полезно знать, что методы копируют некоторые файлы назад и вперед, а sourcePath из текстового поля GUI:

Methode1(){ File.Copy(sourcePath, targetPath) }
Methode2(){ File.Copy(sourcePath, targetPath) }
Methode3(){ File.Copy(sourcePath, targetPath) }
Methode4(){ File.Copy(sourcePath, targetPath) }
Methode5(){ File.Copy(sourcePath, targetPath) }

Что мне нравится делать после нажатия пользователем на запуск в фоновом режиме: запуск метода 1 и 2 После завершения метода 1 и 2 переходите к методу 3 После завершения метода 3 продолжить с методами 4 и 5

Я слышал о задаче, вызове, потоке, но я не понимаю, что и когда используется. И я получаю каждый раз InvalidOperationException , если метод хочет получить sourcePath пользовательского ввода:

Большое спасибо за все ваши ответы! :)

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете использовать метод Parallel.Invoke для параллельного выполнения действий (возможно):

Parallel.Invoke(Methode1, Methode2);
Methode3();
Parallel.Invoke(Methode4, Methode5);

Причина, по которой вы получаете InvalidOperationException, заключается, вероятно, в том, что вы пытаясь получить доступ к UIElement в фоновом потоке. Это не разрешено Вам следует скопировать значение в переменную в потоке диспетчера, а затем получить доступ к переменной в фоновом потоке:

string sourcePath, targetPath;
private void BtnStart(object sender, RoutedEventArgs e)
{
    sourcePath = textBox.Text;
    targetPath = textBox2.Text;
    ...
}

Также следует отметить, что вызов File.Copy в потоке пользовательского интерфейса заблокирует и заблокирует ваш GUI в течение времени, необходимого для копирования файла. Лучше было бы убедиться, что вы всегда копируете файлы в фоновом потоке или копируете файлы асинхронно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...