Бесплатные снипеты на заказ

  • Автор темы Автор темы CSS
  • Дата начала Дата начала
if ("str" != "str2") кавычки убери
 
  • Спасибо
Реакции: Evgeny76
Здравствуйте, друзья! Помогите разобраться. Задача в следующем:
Нужно из папки взять рандомный файл, загрузить его на сервер и удалить после загрузки. Вопрос в том, как реализовать, чтобы это работало в многопотоке? Прошу вас взглянуть на код и подсказать, будет ли он корректно работать в многопотоке, не будут ли потоки одновременно брать один и тот же файл.
Код:
Развернуть Свернуть Копировать
Object FolderLock = new Object();
lock (FolderLock) {
    string[] files = Directory.GetFiles(project.Variables["path"].Value);
    string Lfile = files[new Random().Next(0, files.Count())];
    //код загрузки на сервер
   
    //Удаляем файл
    File.Delete(Lfile);
}
 
Здравствуйте, друзья! Помогите разобраться. Задача в следующем:
Нужно из папки взять рандомный файл, загрузить его на сервер и удалить после загрузки. Вопрос в том, как реализовать, чтобы это работало в многопотоке? Прошу вас взглянуть на код и подсказать, будет ли он корректно работать в многопотоке, не будут ли потоки одновременно брать один и тот же файл.
Код:
Развернуть Свернуть Копировать
Object FolderLock = new Object();
lock (FolderLock) {
    string[] files = Directory.GetFiles(project.Variables["path"].Value);
    string Lfile = files[new Random().Next(0, files.Count())];
    //код загрузки на сервер
  
    //Удаляем файл
    File.Delete(Lfile);
}
Не будет. Объект для лока должен быть общим для всех потоков. Для этого его надо объявлять в общем коде и он должен быть статическим. Изначально в общем коде уже есть такой объект, можно пользоваться им, можно взять как пример. И чтобы уменьшить очередь, я бы советовал брать файл и тут же перемещать его в другую папку. После этого лок можно закрывать и работать с файлом не опасаясь, что его подхватит другой поток + давая сразу возможность работать другим потоком не ожидая, пока файл загрузится
 
  • Спасибо
Реакции: Fantomass
Изначально в общем коде уже есть такой объект
Вы имеете ввиду этот?
Код:
Развернуть Свернуть Копировать
public static object SyncObject = new object();
И правильным будет такой вот код?
Код:
Развернуть Свернуть Копировать
lock (SyncObject) {
    string[] files = Directory.GetFiles(project.Variables["path"].Value);
    string Lfile = files[new Random().Next(0, files.Count())];
    //код загрузки на сервер
   
    //Удаляем файл
    File.Delete(Lfile);
}
 
Вы имеете ввиду этот?
Код:
Развернуть Свернуть Копировать
public static object SyncObject = new object();
И правильным будет такой вот код?
Код:
Развернуть Свернуть Копировать
lock (SyncObject) {
    string[] files = Directory.GetFiles(project.Variables["path"].Value);
    string Lfile = files[new Random().Next(0, files.Count())];
    //код загрузки на сервер
  
    //Удаляем файл
    File.Delete(Lfile);
}
Это та строка кода, о которой я говорил. Но если просто писать SyncObject, то будет использоваться объект не из общего кода, а зенновский объект, который распространяется на все проекты. Чтобы использовать конкретно объект из общего кода нужно прописать название класса перед ним и его через точку. У меня это CommonCode.SyncObject
 
  • Спасибо
Реакции: Fantomass
Это та строка кода, о которой я говорил. Но если просто писать SyncObject, то будет использоваться объект не из общего кода, а зенновский объект, который распространяется на все проекты. Чтобы использовать конкретно объект из общего кода нужно прописать название класса перед ним и его через точку. У меня это CommonCode.SyncObject
Спасибо большое, разобрался с этим. Остался непонятным один момент. На форуме находил еще несколько вариантов блокировки, такие как, например:
Код:
Развернуть Свернуть Копировать
lock (SyncObjects.TableSyncer) {
}
//и
lock (SyncObjects.ListSyncer) {
}
Этот код используется только для блокировки таблиц и списков, а код который мы обсуждали выше - это универсальное решение, которое блокирует фрагмент кода в фигурных скобках?
 
Спасибо большое, разобрался с этим. Остался непонятным один момент. На форуме находил еще несколько вариантов блокировки, такие как, например:
Код:
Развернуть Свернуть Копировать
lock (SyncObjects.TableSyncer) {
}
//и
lock (SyncObjects.ListSyncer) {
}
Этот код используется только для блокировки таблиц и списков, а код который мы обсуждали выше - это универсальное решение, которое блокирует фрагмент кода в фигурных скобках?
их привязка к спискам и таблицам чисто формальная. Т.е. они используются в кубиках работы со списками и таблицами, поэтому их предпочтительно использовать и в сниппетах на подобных операциях. Но их механика не отлична от любого другого локера
 
  • Спасибо
Реакции: Fantomass
Привет. Подскажите пожалуйста, как в этой части кода, брать данные из переменных.
Color pixelColor = myBitmap.GetPixel(10, 0);
 
Привет. Подскажите пожалуйста, как в этой части кода, брать данные из переменных.
Color pixelColor = myBitmap.GetPixel(10, 0);


Пробуйте так:

C#:
Развернуть Свернуть Копировать
int x = int.Parse(project.Variables["x"].Value);
int y = int.Parse(project.Variables["y"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);
 
  • Спасибо
Реакции: juk88
Пробуйте так:

C#:
Развернуть Свернуть Копировать
int x = int.Parse(project.Variables["x"].Value);
int y = int.Parse(project.Variables["y"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);
Щас попробую. Я так пробовал:
Color pixelColor = myBitmap.GetPixel(Convert.ToInt32(project.Variables["pix1"].Value, Convert.ToInt32(project.Variables["pix2"]).Value;
Это конечно наверно не правильно?
 
Пробуйте так:

C#:
Развернуть Свернуть Копировать
int x = int.Parse(project.Variables["x"].Value);
int y = int.Parse(project.Variables["y"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);
Ваш код, работает без ошибок. Но вместо цвета пикселя, пишет в переменную: Ок.
А как получить цвет?
 
Пробуйте так:

C#:
Развернуть Свернуть Копировать
int x = int.Parse(project.Variables["x"].Value);
int y = int.Parse(project.Variables["y"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);
Весь код, получился такой:

Bitmap myBitmap = new Bitmap(project.Directory + @"\profile\caps\" + project.Variables["Login"].Value + "1.jpg");
int x = int.Parse(project.Variables["pix1"].Value);
int y = int.Parse(project.Variables["pix2"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);

И результат сохраняется в переменную Pixel

Как получить цвет пикселя в неё?
 
Всё. Дотумкал. Спасибо.
Весь код получился:

Bitmap myBitmap = new Bitmap(project.Directory + @"\profile\caps\" + project.Variables["Login"].Value + "1.jpg");
int x = int.Parse(project.Variables["pix1"].Value);
int y = int.Parse(project.Variables["pix2"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);
return string.Format(@"{0},{1},{2}", pixelColor.R, pixelColor.G, pixelColor.B); // Возвращает цвет пикселя в формате RBG
 
Пробуйте так:

C#:
Развернуть Свернуть Копировать
int x = int.Parse(project.Variables["x"].Value);
int y = int.Parse(project.Variables["y"].Value);
Color pixelColor = myBitmap.GetPixel(x, y);

А, не подскажите, как можно закрасить пиксель в белый цвет?
 
SetPixel(i,j, Color.White);
Спасибо. А как после окрашивания, сохранить результат в тот-же файл? Если сохранять в другой, то всё работает. А, если пытаюсь в тот-же, то не хочет. Выдаёт ошибку.
 
Вот полный код:


Bitmap myBitmap = new Bitmap(project.Directory + @"\profile\caps\" + project.Variables["Login"].Value + "1.jpg");
int x = int.Parse(project.Variables["pix1"].Value);
int y = int.Parse(project.Variables["pix2"].Value);
myBitmap.SetPixel(x, y, Color.White);
myBitmap.Dispose();
myBitmap.Save(project.Directory + @"\profile\caps\" + project.Variables["Login"].Value + "1.jpg");
 
Всем здравствуйте.
Подскажите, как пожаловаться на неправильно разгаданную капчу anti-captcha?
 
Всем привет!!! Подскажите, возможно ли менять число потоков из программы (из кубика)
 
Ребята хелп. Нужен сниппет для Get запроса

У меня старая версия зенки 5.11.3 . Кубик там не отрабатывает =((
 
Помогите вставить в список не только результат по регулярке из DOM но и плюс значение из пременной "текст" через ";"
Есть сгенерированный из стандартного кубика код:
Код:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.DomText;

var regex = new System.Text.RegularExpressions.Regex("регулярка которая находит все IP");
// Поиск всех совпадений
var matchCollection = regex.Matches(text);
for(var i = 0; i < matchCollection.Count; i++)
{
    if (matchCollection[i].Success)
        project.Lists["IP"].Add(matchCollection[i].Value);
}

Понимаю, что работать нужно с этой строкой
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value);
но знаний не хватает...если конечно добавление значения из переменной в список вообще возможно:
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value);project.Variables["text"].Value;
что бы в итоге получить в списке: 192.100.1.2;текст
 
Помогите вставить в список не только результат по регулярке из DOM но и плюс значение из пременной "текст" через ";"
Есть сгенерированный из стандартного кубика код:
Код:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.DomText;

var regex = new System.Text.RegularExpressions.Regex("регулярка которая находит все IP");
// Поиск всех совпадений
var matchCollection = regex.Matches(text);
for(var i = 0; i < matchCollection.Count; i++)
{
    if (matchCollection[i].Success)
        project.Lists["IP"].Add(matchCollection[i].Value);
}

Понимаю, что работать нужно с этой строкой
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value);
но знаний не хватает...если конечно добавление значения из переменной в список вообще возможно:
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value);project.Variables["text"].Value;
что бы в итоге получить в списке: 192.100.1.2;текст
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value+";"+project.Variables["text"].Value);
 
  • Спасибо
Реакции: vrb-by
.
 
Последнее редактирование:
Код:
Развернуть Свернуть Копировать
project.Lists["IP"].Add(matchCollection[i].Value+";"+project.Variables["text"].Value);
Первый раз с конвертировать в С# работаю...
Подскажите пожалуйста:
кубик Взять DOM -> конвертировать в С# -> вставляю из буфера в кубик "свой код". Пытаюсь выполнить ничего не меняя . Ошибка:
Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 4; Cтолбец: 89]
Что делаю не так?
 
Первый раз с конвертировать в С# работаю...
Подскажите пожалуйста:
кубик Взять DOM -> конвертировать в С# -> вставляю из буфера в кубик "свой код". Пытаюсь выполнить ничего не меняя . Ошибка:
Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 4; Cтолбец: 89]
Что делаю не так?
либо конвертация была некорректной, либо в проекте есть другой кубик c#, в котором есть ошибка. Даблклик по ошибке лога выведет на проблемный кубик. В ошибке лога указан номер проблемной строки
 
  • Спасибо
Реакции: vrb-by
либо конвертация была некорректной, либо в проекте есть другой кубик c#, в котором есть ошибка. Даблклик по ошибке лога выведет на проблемный кубик. В ошибке лога указан номер проблемной строки
кубика всего два...
 
я не экстрасенс)

Вставляю такой код:
Код:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.DomText;
var regex = new System.Text.RegularExpressions.Regex(@"(?<=<a\ class="res-small__title"\ href=")https://.*?(?=")");
// Поиск всех совпадений
var matchCollection = regex.Matches(text);
for(var i = 0; i < matchCollection.Count; i++)
{
    if (matchCollection[i].Success)
        project.Lists["URL"].Add(matchCollection[i].Value);
}
Что не так конвертируется?
 
ну тебе ведь подчёркивает красным
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)