Используйте делегат из нескольких классов и методовC#

Место общения программистов C#
Ответить
Anonymous
 Используйте делегат из нескольких классов и методов

Сообщение Anonymous »


Как я могу отправлять значения между разными методами из других классов?

У меня есть разные классы, которые управляют продуктами на веб-сайте. Итак, у меня есть классы для продуктов, категорий, изображений и т. д. Из класса Product у меня есть метод удаления продукта, который вызывает класс Images для удаления изображений из продукта. Я хотел бы показать ход удаления изображений, а затем продолжить удаление сведений о продукте или других вложений, таких как PDF-файлы. Но есть и другие методы из других классов, которые могут вызывать класс Images для удаления изображений или только 1 изображения. С этого момента у меня есть форма, в которой я могу удалить продукт, прогресс которого я хотел бы отобразить на этикетке. Кроме того, большинство методов являются асинхронными, а классы содержат общедоступный делегат ProgressUpdate(int counterProduct, int counterTotal, string text) и публичное событие ProgressUpdate onProgressUpdate.

В моей форме у меня есть:

public async Task deleteProducts(List Products) { foreach (вар-продукт в продуктах) { Продукты prdct = новые продукты(); вар isProductDeleted = ждут Products.deleteProduct(продукт); если (isProductDeleted) { вар isDeleted = ждут I.DeleteImages(продукт); } } вернуть истину; } В классе Products:

Продукты класса { общедоступная статическая асинхронная задача deleteProduct (int idProduct, int idShop = 1) { если (idProduct > 0) { строковый запрос = "SELECT * FROM ps_product WHERE id_product = " + idProduct + ";"; База данных БД = новая база данных(); Таблица DataTable = новый DataTable(); таблица = db.SelectWebsiteQuery(запрос); если (таблица.Rows.Count > 0) { //Вещи, которые нужно удалить //Сначала проверяем, не закреплен ли этот товар за заказом //ps_product :Проверить //ps_product_attachment: проверить //ps_product_carrier: проверить //ps_product_lang: проверить //ps_product_sale: проверьте //ps_product_shop: проверить //ps_product_supplier: проверить //ps_product_tag: проверить //ps_revws_criterion: Не обязательно //ps_revws_criterion_category: Не обязательно //ps_revws_criterion_lang: Не обязательно //ps_revws_criterion_product: проверить //ps_revws_review: ок //ps_revws_review_grade: ок //ps_revws_review_image: ок //ps_revws_review_reaction: ок //ps_search_index и обновляем ps_search_word //ps_специфическая_цена: ок //ps_specific_price_priority: ок //ps_stock_available: ок //ps_stock_mvt //ps_image //ps_image_lang: ок //ps_image_shop //ps_feature_product //ps_category_product int id_product = Convert.ToInt32(table.Rows[0]["id_product"]); int id_supplier = Convert.ToInt32(table.Rows[0]["id_supplier"]); int id_category_default = Convert.ToInt32(table.Rows[0]["id_category_default"]); ProductDelete DataTable = новый DataTable(); //Проверьте, был ли заказан этот товар. Если да, вы не можете удалить его, поскольку он не будет виден в истории заказов. query = "SELECT * FROM ps_order_detail WHERE product_id = " + idProduct + ";"; ProductDelete = db.SelectWebsiteQuery(запрос); если (productDelete.Rows.Count == 0) { //Сначала удаляем изображения query = "ВЫБРАТЬ id_image ИЗ ps_image ГДЕ id_product = " + id_product + ";"; ProductDelete = db.SelectWebsiteQuery(запрос); if(db.InsertWebsiteQuery("УДАЛЕНИЕ ИЗ ps_product WHERE id_product = " + idProduct + ";") == 1) { query = "ВЫБРАТЬ вложение ИЗ ps_product_attachment ГДЕ id_product = " + idProduct + ";"; ProductDelete = db.SelectWebsiteQuery(запрос); если (productDelete.Rows.Count > 0) { for(int a = 0; a 0 && idImage > 0 && idCategory > 0) { Список imageNames = новый список(); База данных БД = новая база данных(); строковый запрос = ""; Таблица DataTable = новый DataTable(); //Сначала загружаем имена изображений из таблицы image_type в зависимости от idProduct и idImage или idCategory query = "SELECT `name` FROM ps_image_type WHERE " + (idCategory > 0 ? "categories" : "products") + " = 1;"; таблица = db.SelectWebsiteQuery(запрос); если (таблица.Rows.Count > 0) { //Загружаем имена в список for(int i = 0; i < table.Rows.Count; i++) { строка imageName = table.Rows["name"].ToString(); имя_изображения = Имя_изображения.Обрезать(); imageNames.Add(imageName); } //Удалить все изображения из товара if (idProduct > 0 && idImage < 1 && idCategory < 1) { onProgressUpdate?.Invoke(0, 0, "Получение изображений для удаления..."); query = "SELECT id_image FROM ps_image WHERE id_product = " + idProduct + ";"; таблица = db.SelectWebsiteQuery(запрос); если (таблица.Rows.Count > 0) { for (int i = 0; i < table.Rows.Count; i++) { строка imagePath = Properties.Settings.Default.FtpImagePath; int id_image = Convert.ToInt32(table.Rows["id_image"].ToString()); строка productImagePath = GetImagePath(id_image, imagePath); for(int n = 0; n 0 && idCategory < 1)//Удалить выбранное изображение { строка imagePath = Properties.Settings.Default.FtpImagePath; ИНТ id_image = idImage; строка productImagePath = GetImagePath(id_image, imagePath); for (int n = 0; n 0 ? "categories." : "products."), true, ""); вернуть ложь; } } еще { вернуть ложь; } } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»