powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработичк исключений c#
62 сообщений из 62, показаны все 3 страниц
Обработичк исключений c#
    #39813851
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть просто код ... который пробегает по datagridview определенного столбца, в котором список полного пути к конченому подкаталогу

проблема в том, например открыт файл который находится в подкаталоге и при переименование подкааталога срабатывает исключение в вида такого что не возможно получить доступ к папке (файлу) то дальнейшие переименование других подкаталогов прерывается.

Вопрос как сделать такое
Программа пробегается по списку подкаталогов, при попытки переименовать
если сработало исключение то имя подкаталога который не переименовывается записать, например в листбокс и далее продолжить переименование если опять исключение опять добавить имя подкаталога в листбокс

Заранее спс

PS И еще вопрос ... кто нибудь скинет рабочий код, который позволяет при нажатие на кнопке "стоп" останавливать
BackgroundWorker
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813856
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014Есть просто код ... который пробегает по datagridview определенного столбца, в котором список полного пути к конченому подкаталогу
Круто ты описал процесс. Я аж только с третьего прочтения догадался о чем речь )))

SAS2014проблема в том, например открыт файл который находится в подкаталоге и при переименование подкааталога срабатывает исключение в вида такого что не возможно получить доступ к папке (файлу) то дальнейшие переименование других подкаталогов прерывается.
Я правильно догадался: у тебя есть функция, в которой есть цикл, в котором выполняется перебор путей и выполнение некоторых действий по этим путям (переименование файлов или каталогов)? И, если внутри цикла вылетает исключение (exception), то происходит вылет из цикла и перебор всех путей прерывается?

Что-то вроде этого:
Код: c#
1.
2.
3.
4.
5.
6.
7.
void MyFunction(string[] pathArray)
{
  foreach(string path in pathArray)
  {
    // здесь происходит переименование и может вылететь exception
  }
}



Если я прав, попробуй модифицировать код примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void MyFunction(string[] pathArray)
{
  foreach(string path in pathArray)
  try
  {
    // здесь происходит переименование и может вылететь exception
  }
  catch(Exception ex)
  {
    list1.Items.Add(path); // отображение проблемного пути
    MessageBox.Show(ex.Message); // вывод сообщения об ошибке для диагностики проблемы
  }
}



Ну или приведи фрагмент своего кода, чтобы говорить более конкретно.

SAS2014PS И еще вопрос ... кто нибудь скинет рабочий код, который позволяет при нажатие на кнопке "стоп" останавливать
BackgroundWorker
Более опытные коллеги меня поправят, но, по-моему, остановить работу BackgroundWorker можно только тогда, когда BackgroundWorker в своем DoWork проверяет не пришла ли команда на прерываниие выполнения. Если в DoWork такой проверки не выполнять, то остановить BackgroundWorker штатно нельзя. Тебя именно такой вариант интересует?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813858
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomsky,
+1
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813859
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и проверяй перед переименованием, существует ли такой каталог.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813861
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BackgroundWorker в топку, Task с CancellationToken наше все.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813863
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
По справедливости, тот токен и есть то что выше stomsky сказал.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813865
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Так то да, я к тому что с BackgroundWorker давно пора слезть.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813878
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123stomsky,
+1

не торопись, он еще не дописал код

авторкто нибудь скинет рабочий код, который позволяет при нажатие на кнопке "стоп" останавливать
BackgroundWorker
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813887
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
Ты прав конечно)
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813965
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВBackgroundWorker в топку, Task с CancellationToken наше все.
ничего не мешает использовать CancellationToken вместе с BackgroundWorker
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39813985
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно, вот так
на форме 2 кнопки и 2 текст бокса
StartButton, CancelButton, SourceFolderTextBox и FolderSizeTextBox

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace BackgroundWorkerExample
{
    public partial class Form1 : Form
    {
        private BackgroundWorker _worker;
        public Form1()
        {
            InitializeComponent();
            ChangeButtonsState(false);
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            //Очищаем резултат
            FolderSizeTextBox.Text = string.Empty;
            //Создаем воркер
            _worker = new BackgroundWorker
            {
                WorkerSupportsCancellation = true
            };
            _worker.DoWork += BackgroundWorker_DoWork;
            _worker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
            _worker.RunWorkerAsync(SourceFolderTextBox.Text);
            //Меняем состояние кнопок
            ChangeButtonsState(true);
        }

        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //Получаем результат
            long folderSize = (long)e.Result;
            //Сохраняем его в TextBox
            FolderSizeTextBox.Text = folderSize.ToString();
            //Меняем состояние кнопок
            ChangeButtonsState(false);
            //Высвобождаем worker
            _worker.Dispose();
            _worker = null;
        }
        /// <summary> Меняет состояние кнопок </summary>
        /// <param name="isWorking">Состояние выполнения</param>
        private void ChangeButtonsState(bool isWorking)
        {
            StartButton.Enabled = !isWorking;
            //Если Worker не поддерживает отмену, кнопка всегда будет выключенной
            CancelButton.Enabled = _worker?.WorkerSupportsCancellation == true && isWorking;
        }

        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            //Сохраняем в результаты асинхронного выполнения размер папки
            e.Result = GetFolderSize((string)e.Argument);
        }

        /// <summary> Рекурсивно вычисляет размер папки </summary>
        /// <param name="folderPath">Путь к папке</param>
        /// <returns>Размер папки</returns>
        private long GetFolderSize(string folderPath)
        {
            long size = 0;

            try
            {
                string[] files = Directory.GetFiles(folderPath, "*");
                foreach (string file in files)
                {
                    //Если запрошена отмена кидаем исключение
                    if (_worker.CancellationPending) throw new OperationCanceledException();
                    var fileInfo = new FileInfo(file);
                    size += fileInfo.Length;
                }

                string[] folders = Directory.GetDirectories(folderPath, "*");
                foreach (string folder in folders)
                {
                    //Если запрошена отмена кидаем исключение
                    if (_worker.CancellationPending) throw new OperationCanceledException();
                    size += GetFolderSize(folder);
                }
            }
            catch (OperationCanceledException)
            {
                //так как операция отменена, результаты операции не известны
                return -1;
            }
            catch(Exception ex)
            {
                Debug.Print(ex.Message);
            }
            return size;
        }
        
        private void CancelButton_Click(object sender, EventArgs e)
        {
            //Если воркер поддерживает отмену, вызываем её
            if (_worker.WorkerSupportsCancellation) _worker.CancelAsync();
        }
    }
}
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814113
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВPetro123,
Так то да, я к тому что с BackgroundWorker давно пора слезть.
Почему?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814118
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_ПавЕвгенийВPetro123,
Так то да, я к тому что с BackgroundWorker давно пора слезть.
Почему?депрекатед
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814126
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_Павпропущено...

Почему?депрекатед
Почему?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814132
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,
Со слов профи с большим количеством лайков)).
Вбей 2 слова в гугль и увидишь.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814175
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_Пав,
Со слов профи с большим количеством лайков)).
Вбей 2 слова в гугль и увидишь.
а можно ссылку на профи? А то гугл забанили
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814188
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Павгугл забанили есть яндекс
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814215
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСупер_Павгугл забанили есть яндекс
Прочитал. Всё субъективно. Доводы автора "удобно/неудобно". В этом плане не может быть единого мнения. Ему удобно так, мне удобно иначе. Согласен, в каких-то моментах Task.Run смотрится удобней, а в каких-то нет.
Посему, каждый вправе сам решить, что для него удобно. Но говорить, что BW устарел и им не надо пользоваться - это навязывать мнение, в большинстве случаев даже не своё.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814216
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСупер_Павгугл забанили есть яндекс
Спасибо за ссылку!
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814225
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,
Да
Выбирай, кто тебе по душе и кого слушать.
https://stackoverflow.com/questions/12414601/async-await-vs-backgroundworker
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814232
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_ПавПосему, каждый вправе сам решить, что для него удобно. Но говорить, что BW устарел и им не надо пользоваться - это навязывать мнение, в большинстве случаев даже не своё.TPL создан как замена для BW, вот и все. Ты можешь продолжать пользоваться хоть NET2.0, но всё меньше людей смогут давать тебе советы. Опять же, ты будешь использовать NET2.0 и спрашивать всех вокруг, почему ты должен переходить на другие версии? Потому что устарело - достаточно адекватный ответ.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814249
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВBackgroundWorker в топку, Task с CancellationToken наше все.

Task не умеет репортить прогресс без, хоть и небольшого, но все же рукоблудия (и, кстати, уверен, что дохрена народу себе при этом в ногу выстрелят). А так, да, с таском удобнее.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814260
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСупер_ПавПосему, каждый вправе сам решить, что для него удобно. Но говорить, что BW устарел и им не надо пользоваться - это навязывать мнение, в большинстве случаев даже не своё.TPL создан как замена для BW, вот и все. Ты можешь продолжать пользоваться хоть NET2.0, но всё меньше людей смогут давать тебе советы. Опять же, ты будешь использовать NET2.0 и спрашивать всех вокруг, почему ты должен переходить на другие версии? Потому что устарело - достаточно адекватный ответ.
Вы утрируете, говоря про net2. Чем BW устарел? Я вижу только аргументы в пользу "удобно/неудобно". Но как уже говорил - это субъективное мнение.В ИТ устарел - это жрет больше ресурсов, медленней работает и т.д. BW подходит под эти критерии? Нет. Тогда в чем он устарел? Больше символов печать надо? Ну для меня это по кайфу, если конечно речь не о копипасте и говнокоде
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_ПавВ ИТ устарел - этоотсутствие комьюнити)))
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814266
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_ПавShocker.Proпропущено...
TPL создан как замена для BW, вот и все. Ты можешь продолжать пользоваться хоть NET2.0, но всё меньше людей смогут давать тебе советы. Опять же, ты будешь использовать NET2.0 и спрашивать всех вокруг, почему ты должен переходить на другие версии? Потому что устарело - достаточно адекватный ответ.
Вы утрируете, говоря про net2. Чем BW устарел? Я вижу только аргументы в пользу "удобно/неудобно". Но как уже говорил - это субъективное мнение.В ИТ устарел - это жрет больше ресурсов, медленней работает и т.д. BW подходит под эти критерии? Нет. Тогда в чем он устарел? Больше символов печать надо? Ну для меня это по кайфу, если конечно речь не о копипасте и говнокодеЯ уже сказал - чем дальше, тем меньше специалистов, готовых ответить тебе на вопросы по BW.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814267
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

какого рукоблудия? Progress<T> : Progress<T> идет из коробки, без всяких рукоблудий.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814268
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatTask не умеет репортить прогресс без, хоть и небольшого, но все же рукоблудия (и, кстати, уверен, что дохрена народу себе при этом в ногу выстрелят). А так, да, с таском удобнее.Ну вроде как для этого Progress<T> есть из коробки....
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814269
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(повтор на втором игроке
)
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814300
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Супер_ПавВы утрируете, говоря про net2. Чем BW устарел?
Нет встроенного механизма работы с несколькими таким потоками. То есть написать такой механизм можно, но зачем, если сейчас есть Таски, где все это реализовано?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814302
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

просто создает N истансов воркера, но он не поддерживает асинхронность вроде, на счет пула потоков не уверен
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814307
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfkthatTask не умеет репортить прогресс без, хоть и небольшого, но все же рукоблудия (и, кстати, уверен, что дохрена народу себе при этом в ногу выстрелят). А так, да, с таском удобнее.Ну вроде как для этого Progress<T> есть из коробки....

Хм... Да, действительно. Не знал, не знал. Впрочем, я десктопом не занимаюсь, т.ч. мне оно никогда актуально не было.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814354
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код переименования каталогов ... пытался понять куда запихнуть искл. позволяющие выплеснуть в лист другой формы иям каталога которого не удалось переименовать и продолжать работы for и вот запутался что куда

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
// Переименование подкаталога
        private void b_rename_Click(object sender, EventArgs e)
        {
            try
            {   
                var rename = MessageBox.Show("Точно переименовать подкаталоги?", "Check_catalogues!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (rename == DialogResult.Yes)
                {

                    for (int j = 0; j < dataGridView1.RowCount; j++)
                    {
                        string priznak = dataGridView1.Rows[j].Cells[3].Value.ToString();
                        if (priznak == "0") // если пустой подкаталог то переименовать
                        {

                            string old_name = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h = old_name.Substring(0, old_name.LastIndexOf('\\'));
                            string new_name = h + "\\" + t_new_name_null.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name, new_name);
                            
                        }

                        if (priznak == "1") // если нет файла в подкаталоге то переименовать
                        {

                            string old_name2 = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h2 = old_name2.Substring(0, old_name2.LastIndexOf('\\'));
                            string new_name2 = h2 + "\\" + t_new_name_err.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name2, new_name2);
                        }
                    }

                    MessageBox.Show(
                       this,
                           "Переименование всех подкаталогов прошло удачно",
                           "Check_catalogues",
                           MessageBoxButtons.OK,
                           MessageBoxIcon.Information
                           );
                }
            }
            catch (Exception)
            {                
                               
            }
                 finally
                    {
                        Form3 f3 = new Form3();
                        f3.listBox1.Items.Add(dataGridView1.Rows[2].Cells[0].Value.ToString() + " - " + "Не удалось переименовать");
                        f3.Show();
                    }
        }
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814355
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может искл в самом цикле внутри прописать?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814370
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014,
То есть ты сегодня не читая все выше опять запостил свой код.
Прочти топик.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814404
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто код попросили .... в начале вот и кинул
Вопрос решил ... искл в цикле прописал
Всем спасибо кто отписался по вопросу исключения
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814406
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто то там мне кидал код по остановке backgroundWorker

на половину понял на половину его не понял
можешь мне на моем примере показать как остановить backgroundWorker?
Заранее спс

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                  while (backgroundWorker1.CancellationPending == true)
                  { 
                  //  test_workera.Invoke(new MethodInvoker(() =>test_workera.Text = "1" ));

               
                    //Пустые подкаталоги
                    if (textBox1.Text == "path")
                    {
                        List<string> dirs = Directory.GetDirectories((string)e.Argument, "*", SearchOption.AllDirectories).Where(s => Size(s) == 0).ToList();
                        foreach (string item in dirs)
                        {
                            string[] arr = item.Split(new string[] { @"\" }, StringSplitOptions.None); // отбрасывает пути к пустой папке
                            string it = arr.Last(); // отбрасывает пути к пустой папке
                            dataGridView1.Invoke(new MethodInvoker(() => dataGridView1.Rows.Add((item), ("Пустой"), (it), ("0")))); // добавление найденых пустых каталогов с путями и без путей + 0 пустой подкаталог
                            Thread.Sleep(100); // пауза

                            dataGridView1.Invoke(new MethodInvoker(() => dataGridView1.FirstDisplayedCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0]));// авт.прокрутка датагрида
                        }
                    }
               

                    }

                    Invoke(new Action(() =>
                    {
                       // test_workera.Invoke(new MethodInvoker(() => test_workera.Text = "0"));
                       // if (test_workera.Text == "0") { backgroundWorker1.CancelAsync(); }
                        

                        label1.Text = "Выполнено";
                        label1.ForeColor = Color.Green;
                        button1.Enabled = true; // вкл кнопки обзор
                        catalog.Enabled = true;
                        button2.Enabled = true; // вкл кнопки проверить
                       // b_stop_search.Enabled = false;

                        if (dataGridView1.Rows.Count > 0)
                        {
                            button4.Enabled = true; // вкл кнопки сохранить в файл если есть хотя бы один элемент в списке каталогов
                            label4.Visible = true; // отображать надпись кол-во элементов
                            label5.Visible = true; // отображать надпись кол-во элементов
                            label4.Text = dataGridView1.Rows.Count.ToString(); // кол-во подкаталогов
                            button4.Visible = true; // вкл кнопки сохранить в файл (списко найдены пустых каталогов)
                            groupBox1.Visible = true; //отображать панель переимнования

                        }

                        else
                        {
                            button4.Visible = false;
                            MessageBox.Show(
                            this,
                                "В данном каталоге: " + catalog.Text + " нет подкаталогов соотвествующим критериям",
                                "Check_catalogues",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.None
                                );
                        }

                    }));

                  } //Завер цикла проверки потока
                  backgroundWorker1.WorkerSupportsCancellation = true;
                  backgroundWorker1.CancelAsync();
                
                  //e.Cancel = true; 

               // 

            } 
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        

}
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814408
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes если ты еще читаешь это топик поможешь с воркером?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814410
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskySAS2014Есть просто код ... который пробегает по datagridview определенного столбца, в котором список полного пути к конченому подкаталогу
Круто ты описал процесс. Я аж только с третьего прочтения догадался о чем речь )))

SAS2014проблема в том, например открыт файл который находится в подкаталоге и при переименование подкааталога срабатывает исключение в вида такого что не возможно получить доступ к папке (файлу) то дальнейшие переименование других подкаталогов прерывается.
Я правильно догадался: у тебя есть функция, в которой есть цикл, в котором выполняется перебор путей и выполнение некоторых действий по этим путям (переименование файлов или каталогов)? И, если внутри цикла вылетает исключение (exception), то происходит вылет из цикла и перебор всех путей прерывается?

Что-то вроде этого:
Код: c#
1.
2.
3.
4.
5.
6.
7.
void MyFunction(string[] pathArray)
{
  foreach(string path in pathArray)
  {
    // здесь происходит переименование и может вылететь exception
  }
}



Если я прав, попробуй модифицировать код примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void MyFunction(string[] pathArray)
{
  foreach(string path in pathArray)
  try
  {
    // здесь происходит переименование и может вылететь exception
  }
  catch(Exception ex)
  {
    list1.Items.Add(path); // отображение проблемного пути
    MessageBox.Show(ex.Message); // вывод сообщения об ошибке для диагностики проблемы
  }
}



Ну или приведи фрагмент своего кода, чтобы говорить более конкретно.

SAS2014PS И еще вопрос ... кто нибудь скинет рабочий код, который позволяет при нажатие на кнопке "стоп" останавливать
BackgroundWorker
Более опытные коллеги меня поправят, но, по-моему, остановить работу BackgroundWorker можно только тогда, когда BackgroundWorker в своем DoWork проверяет не пришла ли команда на прерываниие выполнения. Если в DoWork такой проверки не выполнять, то остановить BackgroundWorker штатно нельзя. Тебя именно такой вариант интересует?

Спасибо за направление на верный путь по решению вопроса ... свой текст закинул в топик выше
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814417
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014,
Зачем вокер?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814419
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014пробегает по datagridviewворкер не нужен.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814428
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. ты хочешь в случае возникновения Exception-а создать новую форму, в которую выведешь список каталогов/файлов, которые не удалось переименовать? Тогда предлагаю:
1) конечно перехват исключения внести внутрь цикла переименований
2) в обработчике накапливать список каталогов/файлов, которые не удалось переименовать
3) после выхода из цикла собственно проверить есть ли в списке из п.2 хотя бы один элемент, и если есть, то создать форму и вывести в нее содержимое этого списка

Типа такого (добавленные мной строки оканчиваются комментарием " // <--"):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
// Переименование подкаталога
        private void b_rename_Click(object sender, EventArgs e)
        {
            List<string> problems = new List<string>(); // <--
            try
            {   
                var rename = MessageBox.Show("Точно переименовать подкаталоги?", "Check_catalogues!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (rename == DialogResult.Yes)
                {
                    for (int j = 0; j < dataGridView1.RowCount; j++)
                    try
                    {
                        string priznak = dataGridView1.Rows[j].Cells[3].Value.ToString();
                        if (priznak == "0") // если пустой подкаталог то переименовать
                        {

                            string old_name = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h = old_name.Substring(0, old_name.LastIndexOf('\\'));
                            string new_name = h + "\\" + t_new_name_null.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name, new_name);
                            
                        }

                        if (priznak == "1") // если нет файла в подкаталоге то переименовать
                        {

                            string old_name2 = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h2 = old_name2.Substring(0, old_name2.LastIndexOf('\\'));
                            string new_name2 = h2 + "\\" + t_new_name_err.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name2, new_name2);
                        }
                    }
                    catch(Exception ex) // <--
                    { // <--
                        problems.Add(dataGridView1.Rows[j].Cells[0].Value.ToString();); // <--
                    } // <--
                    if (problems.Count == 0)  // <--
                      MessageBox.Show(
                         this,
                             "Переименование всех подкаталогов прошло удачно",
                             "Check_catalogues",
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Information
                             );
                    else // <--
                    { // <--
                        Form3 f3 = new Form3(); // <--
                        foreach (strint problem in problems) // <--
                           f3.listBox1.Items.Add(problem + " - " + "Не     удалось переименовать"); // <--
                        f3.Show(); // <--
                    } // <--
                }
            }
            catch (Exception)
            {                
                               
            }
        }



PS. Не в обиду, просто любопытно: судя по вопросу, ты недавно начал C# изучать?
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814430
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123SAS2014пробегает по datagridviewворкер не нужен.
Вероятно, список очень длинный, поэтому наблюдается подвисание интерфейса.
ТС расчитывает, что применение BW проблему с подвисанием решит...
Но то, что данные тянутся непосредственно из datagridview меня несколько смущает...
Я лично предпочитаю в таких случаях по источнику данные ходить, а не по контролу, отображающему данные...
Но что-то мне подсказывает, что ТС либо студент, либо любитель-энтузиаст (в хорошем смысле), либо недавно за C# взялся...
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814445
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyНо то, что данные тянутся непосредственно из datagridview меня несколько смущает...

Да. Это днище.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814450
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomsky,
Да. Он должен разбить задачу на две не пересекающихся даже в форуме.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814451
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyВероятно, список очень длинный,нет. Имхо удаляемые папки с подпапками большие. Но кто знает реально. Может препод задал))
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814458
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и так, до кучи, предлагаю вот это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
                        if (priznak == "0") // если пустой подкаталог то переименовать
                        {

                            string old_name = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h = old_name.Substring(0, old_name.LastIndexOf('\\'));
                            string new_name = h + "\\" + t_new_name_null.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name, new_name);
                        }

                        if (priznak == "1") // если нет файла в подкаталоге то переименовать
                        {
                            string old_name2 = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h2 = old_name2.Substring(0, old_name2.LastIndexOf('\\'));
                            string new_name2 = h2 + "\\" + t_new_name_err.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name2, new_name2);
                        }


заменить на:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
                        if (priznak == "0") // если пустой подкаталог то переименовать
                        {
                            string old_name = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h = System.IO.Path.GetDirectoryName(old_name);
                            string new_name = System.IO.Path.Combine(
                                    h, 
                                    t_new_name_null.Text,
                                    dataGridView1.Rows[j].Cells[2].Value.ToString());
                            System.IO.Directory.Move(old_name, new_name);
                            
                        }
                        if (priznak == "1") // если нет файла в подкаталоге то переименовать
                        {
                            string old_name2 = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h2 = System.IO.Path.GetDirectoryName(old_name2);
                            string new_name2 = System.IO.Path.Combine(
                                    h2,
                                    t_new_name_err.Text,
                                    dataGridView1.Rows[j].Cells[2].Value.ToString());
                            System.IO.Directory.Move(old_name2, new_name2);
                        }



А если в самом начале файла воткнуть:
Код: c#
1.
using System.IO.Path;


то далее по тексту этот самый "System.IO.Path" можно будет опускать.
Код компактнее будет.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814460
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyА если в самом начале файла воткнуть:
Код: c#
1.
using System.IO.Path;



Сорри, должно быть конечно:
Код: c#
1.
using System.IO;


И тогда можно будет опустить по тексту это: "System.IO".
От упоминания класса "Path" по коду не избавишься )
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814463
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyОт упоминания класса "Path" по коду не избавишься )
Ну почему...

Код: c#
1.
using static System.IO.Path;
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814466
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyОт упоминания класса "Path" по коду не избавишься )

Код: c#
1.
using static System.IO.Path;



Поддерживается аж с шестой версии шарпа. Но, имхо, такой абьюз языка - это уже даже не днище, а "с днища постучали" (с)
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814468
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

"Гонки первонахов"
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814660
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyТ.е. ты хочешь в случае возникновения Exception-а создать новую форму, в которую выведешь список каталогов/файлов, которые не удалось переименовать? Тогда предлагаю:
1) конечно перехват исключения внести внутрь цикла переименований
2) в обработчике накапливать список каталогов/файлов, которые не удалось переименовать
3) после выхода из цикла собственно проверить есть ли в списке из п.2 хотя бы один элемент, и если есть, то создать форму и вывести в нее содержимое этого списка

Типа такого (добавленные мной строки оканчиваются комментарием " // <--"):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
// Переименование подкаталога
        private void b_rename_Click(object sender, EventArgs e)
        {
            List<string> problems = new List<string>(); // <--
            try
            {   
                var rename = MessageBox.Show("Точно переименовать подкаталоги?", "Check_catalogues!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (rename == DialogResult.Yes)
                {
                    for (int j = 0; j < dataGridView1.RowCount; j++)
                    try
                    {
                        string priznak = dataGridView1.Rows[j].Cells[3].Value.ToString();
                        if (priznak == "0") // если пустой подкаталог то переименовать
                        {

                            string old_name = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h = old_name.Substring(0, old_name.LastIndexOf('\\'));
                            string new_name = h + "\\" + t_new_name_null.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name, new_name);
                            
                        }

                        if (priznak == "1") // если нет файла в подкаталоге то переименовать
                        {

                            string old_name2 = dataGridView1.Rows[j].Cells[0].Value.ToString();
                            string h2 = old_name2.Substring(0, old_name2.LastIndexOf('\\'));
                            string new_name2 = h2 + "\\" + t_new_name_err.Text + dataGridView1.Rows[j].Cells[2].Value.ToString();
                            System.IO.Directory.Move(old_name2, new_name2);
                        }
                    }
                    catch(Exception ex) // <--
                    { // <--
                        problems.Add(dataGridView1.Rows[j].Cells[0].Value.ToString();); // <--
                    } // <--
                    if (problems.Count == 0)  // <--
                      MessageBox.Show(
                         this,
                             "Переименование всех подкаталогов прошло удачно",
                             "Check_catalogues",
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Information
                             );
                    else // <--
                    { // <--
                        Form3 f3 = new Form3(); // <--
                        foreach (strint problem in problems) // <--
                           f3.listBox1.Items.Add(problem + " - " + "Не     удалось переименовать"); // <--
                        f3.Show(); // <--
                    } // <--
                }
            }
            catch (Exception)
            {                
                               
            }
        }



PS. Не в обиду, просто любопытно: судя по вопросу, ты недавно начал C# изучать?

Спасибо за инфу я уже понял, что да как надо по данному коду. И да я самостоятельно изучаю си шарп ... так сказать пытаюсь .. и ну иногда получается самому найти ответы, а иногда приходится спрашивать коллег иили на форуме ... но это крайний случай (так как лучше самому найти ответы)
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814666
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyPetro123пропущено...
воркер не нужен.
Вероятно, список очень длинный, поэтому наблюдается подвисание интерфейса.
ТС расчитывает, что применение BW проблему с подвисанием решит...
Но то, что данные тянутся непосредственно из datagridview меня несколько смущает...
Я лично предпочитаю в таких случаях по источнику данные ходить, а не по контролу, отображающему данные...
Но что-то мне подсказывает, что ТС либо студент, либо любитель-энтузиаст (в хорошем смысле), либо недавно за C# взялся...

datagridview мне удобен в использование тем что там столбцы как минимум и настроить отображение и прочее легче, а инфа туда попадет исключительно для отображение, с источником данных так каких как БД не связан ....
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814669
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123SAS2014,
Зачем вокер?
хотел анимацию сделать при заполнении столбцов .... датагрида ... и щас необходима кнопка стоп
если есть вариант, который будет позволит постепенно заполнение строк и возможность остановки процесса то скажи что за вариант
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814675
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014datagridview мне удобен в использование тем что там столбцы как минимум и настроить отображение и прочее легче, а инфа туда попадет исключительно для отображение, с источником данных так каких как БД не связан ....

Почитал бы ты, лучше, что-нибудь про всякие паттерны ООП, MVC, MVP и проч., что ли, вместо того чтобы садиться и с набегу свой говнокод (ты уж извини, но твой код - это самый что ни на есть говнокод) писать.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814683
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSAS2014datagridview мне удобен в использование тем что там столбцы как минимум и настроить отображение и прочее легче, а инфа туда попадет исключительно для отображение, с источником данных так каких как БД не связан ....

Почитал бы ты, лучше, что-нибудь про всякие паттерны ООП, MVC, MVP и проч., что ли, вместо того чтобы садиться и с набегу свой говнокод (ты уж извини, но твой код - это самый что ни на есть говнокод) писать.

ну так перепиши мой под свой взгляд раз такой умный
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814686
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014ну так перепиши мой под свой взгляд раз такой умный
Мне на работе за код платят двадцатку в час. Поэтому писать код за тебя просто так я не хочу. Советом помочь - это всегда пожалуйста.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814694
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014datagridview мне удобен в использование тем что там столбцы как минимум и настроить отображение и прочее легче, а инфа туда попадет исключительно для отображение, с источником данных так каких как БД не связан ....
Вообще под источником данных я подразумевал не БД, "локальное хранилище" типа DataSet/DataTable (раз уж все равно WinForms используешь, так почему бы не пользоваться и этими классами?) или список/массив экземпляров класса, к которым через BindingSource привязывается DataGridView.
Но вообще дело хозяйское...
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814701
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014Petro123SAS2014,
Зачем вокер?
хотел анимацию сделать при заполнении столбцов .... датагрида ... и щас необходима кнопка стоп
если есть вариант, который будет позволит постепенно заполнение строк и возможность остановки процесса то скажи что за вариант
Анимацию такую не люблю.
Есть вариант фоновой работы как у тебя на сотовом в андроиде. Крутится колесико индикатор.
Тогда как сказал выше - дели на 2 вопроса отдельных.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814826
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSAS2014ну так перепиши мой под свой взгляд раз такой умный
Мне на работе за код платят двадцатку в час. Поэтому писать код за тебя просто так я не хочу. Советом помочь - это всегда пожалуйста.

совет одно критика кода другое, ты же не можешь доказать что ты лучше напишешь
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814835
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014,

хотите совета как и что сделать лучше?

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

А ещё хороший способ - спрашивать пользователей о том, что бы они хотели улучшить.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39814924
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS2014ты же не можешь доказать что ты лучше напишешь

По крайней мере, я знаю про System.IO.Path Начни хотя бы с него, потому что то, как ты работаешь с путями - это двойной фейспалм.
...
Рейтинг: 0 / 0
Обработичк исключений c#
    #39816833
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSAS2014ты же не можешь доказать что ты лучше напишешь

По крайней мере, я знаю про System.IO.Path Начни хотя бы с него, потому что то, как ты работаешь с путями - это двойной фейспалм.

зато работает
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработичк исключений c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]