Форма зависает при выполнении кода в потоке
Цитата: Удаленный пользователь от 23.10.2021, 15:01Всем привет. Мне нужно брать путь к файлу из массива и копировать его в новое место, реализовываю все в потоке, но прога все равно зависает на время выполнения задачи. И да, если это вообще играет какую либо роль - пишу на WPF. Код:
void copy() { this.Dispatcher.Invoke(() => { for (int i = 0; i < itemslist.Length; i++) { if (File.Exists(itemslist[i])) { string fileName = System.IO.Path.GetFileName(itemslist[i]); File.Copy(itemslist[i], EditDir.Text + "/" + fileName); } if (Directory.Exists(itemslist[i])) { CopyDirs(itemslist[i], EditDir.Text); } } }); } private void copyBtn_Click(object sender, RoutedEventArgs e) { new Thread(() => { copy(); }).Start(); }
Всем привет. Мне нужно брать путь к файлу из массива и копировать его в новое место, реализовываю все в потоке, но прога все равно зависает на время выполнения задачи. И да, если это вообще играет какую либо роль - пишу на WPF. Код:
void copy()
{
this.Dispatcher.Invoke(() =>
{
for (int i = 0; i < itemslist.Length; i++)
{
if (File.Exists(itemslist[i]))
{
string fileName = System.IO.Path.GetFileName(itemslist[i]);
File.Copy(itemslist[i], EditDir.Text + "/" + fileName);
}
if (Directory.Exists(itemslist[i]))
{
CopyDirs(itemslist[i], EditDir.Text);
}
}
});
}
private void copyBtn_Click(object sender, RoutedEventArgs e)
{
new Thread(() => { copy(); }).Start();
}
Цитата: admin от 23.10.2021, 15:19Приветствую снова, Алексей 🖐
В данном случае намного лучше делать в асинхронном потоке (задаче).async void copyBtn_Click(object sender, RoutedEventArgs e) { await Task.Run(() => copy()); }
Приветствую снова, Алексей 🖐
В данном случае намного лучше делать в асинхронном потоке (задаче).
async void copyBtn_Click(object sender, RoutedEventArgs e)
{
await Task.Run(() => copy());
}
Цитата: Удаленный пользователь от 23.10.2021, 16:40блин, на Win forms работает , на WPF - нет, ну и на этом спасибо. Буду гуглить дальше.
блин, на Win forms работает , на WPF - нет, ну и на этом спасибо. Буду гуглить дальше.