Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: Lazy KoT
Дата сообщения: 14.03.2009 12:38
BaluBig

Цитата:
Тебе нужно данные при поиске помещать не сразу в ListView, а в какую-то промежуточную структуру...
ИМХО как-то сложно. Подписаться на события System.IO.FileSystemWatcher и перезаполнить ListView Directory.GetFiles.
Автор: V0lt
Дата сообщения: 14.03.2009 12:48
Lazy KoT
BaluBig
понятно

Не подскажите как можно организовать простейшее дерево, элементами которого будут структуры с 2, 3-мя переменными?
Идея такая, я читаю файл и по ходу чтения строю и заполняю свое дерево. Что-то типа TreeView, только без визуализации...
Автор: Lazy KoT
Дата сообщения: 14.03.2009 13:40
V0lt
Посмотри тут
Автор: avkorets
Дата сообщения: 14.03.2009 15:18
Lazy KoT
ок гляну...
BaluBig
да я так впринципе и думал только не знаю как это реализовать..
пример мож дать использования промежуточной структуры???
Автор: BaluBig
Дата сообщения: 15.03.2009 19:19

Цитата:
одписаться на события System.IO.FileSystemWatcher и перезаполнить ListView Directory.GetFiles
Да, вариант. Чего-то я про него подзабыл...

avkorets

Цитата:
мож дать использования промежуточной структуры???
Ну во-первых рассмотри вариант, который предлагает Lazy KoT. Во-вторых, что именно непонятно со структурой? В простейшем случае это список имен (или полных путей) файлов, хранящихся в List<string>. Для поиска элементов можно использовать методы List<T>.Contains(T item) или List<T>.Exists(Predicate<T> match). Ну или LINQ использовать.


Автор: avkorets
Дата сообщения: 16.03.2009 15:56
Lazy KoT
BaluBig
Спасибо заюзал ватчер..
Ток не пойму почему он событие обрабатывает два раза???

Цитата:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = ConfigurationManager.AppSettings["FolderPath"];
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.FileName;
watcher.Filter = "*.txt";
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;

private static void OnChanged(object source, FileSystemEventArgs e)
{
MessageBox.Show("File: " + e.FullPath + " " + e.ChangeType);
}

вот в данном случае при создании файла выскакивает два мессадж бокса...

а по другому никак?
Автор: Lazy KoT
Дата сообщения: 16.03.2009 18:45
avkorets
Скопировал твой код и потестил. Выдается один MessageBox. (VS2008, .NET Framework 3.5SP1)
Несколько раз подписался на событие? Несколько FileSystemWatcher-ов? Несколько копий программы запущено? Файлы в каталоге каким-то хитрым образом создаешь?
Автор: avkorets
Дата сообщения: 16.03.2009 19:24
Lazy KoT
Да не все как в коде...
Ну создаю копированием из другой директории..кстате из субдиректории...
а ну понятно...если просто создать то все норм вроде =)
пока вопросов нету спасибо Вам огромное...
а есть ли фильтр НЕ следить в субдиректориях с определенным именем?
Автор: Lazy KoT
Дата сообщения: 17.03.2009 11:21
avkorets
Цитата:
а есть ли фильтр НЕ следить в субдиректориях с определенным именем?
Нет. Но есть if в обработчике события. (;
Автор: avkorets
Дата сообщения: 17.03.2009 12:58
Lazy KoT
ага спсиб разобрался уже =)
А не подскажешь где я тут ошибся...Обработчик срабатывае но письмо уходит только когда я закрываю приложение...

Цитата:

public MainForm()
{
InitializeComponent();
Run();
}

static void Run()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = ConfigurationManager.AppSettings["FolderPath"];
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.FileName;
watcher.Filter = "*.txt";
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}

private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (Regex.IsMatch(e.FullPath, ".*ARCH.*")) return;
if (Regex.IsMatch(e.FullPath, ".*IN.*"))
{
string sSubj = "";
...
string sBody = @"сообщение: "+ e.Name;
System.Net.Mail.MailMessagemmMailMessage = new System.Net.Mail.MailMessage();
...
smtpClient.Send(mmMailMessage);
}

Да и еще фильтру можно задать две маски типа или??
"*.txt$|*.doc$"
к тому же узнал, что ватчер пашет токо под NTFS..
Автор: Lazy KoT
Дата сообщения: 18.03.2009 00:33
По поводу двух событий:

Цитата:
if you use a FileSystemWatcher component to monitor the creation of new files in a directory, and then test it by using Notepad to create a file, you may see two Created events generated even though only a single file was created. This is because Notepad performs multiple file system actions during the writing process. Notepad writes to the disk in batches that create the content of the file and then the file attributes. Other applications may perform in the same manner.Because FileSystemWatcher monitors the operating system activities, all events that these applications fire will be picked up.


Цитата:
Да и еще фильтру можно задать две маски
Нет, только создать новый Watcher.
По поводу System.Net.Mail.MailMessage - никогда не приходилось использовать. Вот что пишут люди:

Цитата:
...However, make sure you supply the right properties.
1 Set DeliveryMethod to Network
2 Set UseDefaultCredentials to false.


Цитата:
ватчер пашет токо под NTFS
MSDN об этом молчит... Нужно потестить, правда FAT32 под рукой нет, разве что флешке найду. Завтра гляну.

З.Ы. static методы это необходимость?
Автор: avkorets
Дата сообщения: 18.03.2009 10:03
Lazy KoT
от статика ушел..
про два события спсиб я уже понял =)
Ога создал новый ватчер для другого типа масок...
заюзал UseDefaultCredentials..Но видимо если его не указывать явно то он по умолчанию в фальс..
Вощем не помогло пока ничо по прежнему отпрака происходит тока после закрытия приложения...Самое интересное что если поставить точку останова на smtpClient.Send(mmMailMessage);
то оправка происходит..но где то застревает =)
хотя в других моих решениях оправка с этой же машины происходит без проблем...
может это из-за ватчера?
Автор: Lazy KoT
Дата сообщения: 18.03.2009 11:38
avkoretsНа FAT32 FileSystemWatcher работает.

Цитата:
оправка происходит..но где то застревает
Это как так? (:
Автор: avkorets
Дата сообщения: 18.03.2009 12:50
Lazy KoT
Да не понимаю я =)

Цитата:

....
smtpClient.Send(mmMailMessage);
MessageBox.Show("входящее " + e.Name + " " + e.ChangeType);
}

вот впихнул месаджбокс так он отрабатывает сразу ,а письмо отсылается почему то только после зарытия приложения..
мож ватчер попробовать застопить перед отправкой?
могу если интересно полный вариант (всмысле кусок с ватчером и отправкой) выложить...
Автор: Lazy KoT
Дата сообщения: 18.03.2009 13:30
avkorets
Попробуй try-catch поставить, может exeption какой валится и тихарится.
Автор: avkorets
Дата сообщения: 18.03.2009 13:49
Lazy KoT
да пробовал уже ..нифига...
фсе как по маслу отрабатывает....
да емае где ж затык....голова квадратная уже =)

опа ..чот она у меня вся стала отсылаться таким боком.....
Так либо обновления либо что то поменялось =)
бли все равно не понятно...Вот по идее приложение должно разослать окола 10 писем и не рассылает тока закрываю сразу 10 штук писем...Такое ощущение что скидываются куда то в буфер и этот буфер удерживается приложением..
Просто даж не понятно куда копать...В коде проблема или настройках фраймворка , а мошт винды..
Автор: Lazy KoT
Дата сообщения: 19.03.2009 00:37
avkorets
Попробуй асинхронно отсылать через SendAsync и отследи через событие SendCompleted факт посылки.
Автор: avkorets
Дата сообщения: 19.03.2009 12:48
Lazy KoT
гыгы ничо не понимаю =)


Цитата:

....
string userState = "test message";
smtpClient.SendAsync(mmMailMessage, userState);
smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
MessageBox.Show("входящее " + e.Name + " " + e.ChangeType);
}
}

void smtpClient_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("входящее отправлено");
}

получаю два мессадж бокса...
входящее такойто файл и входящее отправлено =)
а письма не отправляются...только после закрытия приложения...Может настройки фрайм ворка поковырять?

Добавлено:
Кстате не подскажет никто как отследить откуда растут ноги у ошибки при запуске приложения???
У меня при запуске на другой машине (xp sp3) вываливается в ошибку (окно отправить не отправлять) ошибка не описана там..может где нужно подкуртить ннастройки безопасности?

Цитата:

EventType clr20r3, P1 filemodifier.exe, P2 1.0.0.158, P3 49c247a2, P4 system, P5 2.0.0.0, P6 471ebf0d, P7 36d5, P8 7f, P9 system.argumentexception, P10 NIL.
Автор: Dem_anywhere
Дата сообщения: 19.03.2009 15:55
Попробуй послать без MailMessage, через
smtpClient.Send(string from, string recipients, string subject, string body)
Возможно - не может послать активный объект.
Автор: avkorets
Дата сообщения: 19.03.2009 16:14
Dem_anywhere
не таж фигня... =(
Автор: Dem_anywhere
Дата сообщения: 21.03.2009 18:41
Мда... Может попробовать smtpClient прибить после отправки?
Автор: avkorets
Дата сообщения: 22.03.2009 13:16
Dem_anywhere
а как прибить?
Автор: taiwan
Дата сообщения: 23.03.2009 05:29
avkorets

Как обычно, Thread.Terminate
Автор: AlexandrVS
Дата сообщения: 23.03.2009 09:36
Народ нужен совет! Пишу сейчас компонент, рубрикатор для карты города, хочется что бы работал максимально быстро, сам рубрикатор дерево хранится в БД, когда загружаю нужно отобразить первый уровень, в виде баннеров если такие есть, или просто название фирмы, дальше при клике отображаю все адреса фирмы, длина зависит от количества адресов и внутр инфы, пробывал работать с базой что то долго грузит, каким путем лучше пойти использовать Treeview или свое что то писать, очень важна скорость отрисовки компонентов.
Автор: avkorets
Дата сообщения: 23.03.2009 15:07
Dem_anywhere
taiwan
А можно пример кода именно с smtpClient`ом...
Чот у меня не получается =(
спасибо!
Автор: BlackVetal
Дата сообщения: 24.03.2009 06:37
AlexandrVS
C какой базой пробовал работать? Поставь сервер какой-нить, например, из простого MS SQL SERVER EXPRESS или FIREBIRD.
Еще попробуй загружать следующие уровни твоего дерева в отдельном потоке.
Автор: BaluBig
Дата сообщения: 24.03.2009 11:23
AlexandrVS
Что бы не грузить все дерево сразу обычно пользуются такой схемой:
1. Загружается первый уровень дерева.
2. При загрузке для каждого узла первого уровня определяется наличие вложенных узлов.
3. Если вложенные узлы есть, то в дереве воздается фиктивный элемент (что бы юзер плюсик увидел).
4. По событию разворачивания узла дерева по такой же схеме подгружается список узлов, вложенных в разворачиваемый (фиктивный элемент, ясное дело, удаляется). Признаком того, что нужно загружать часть дерева при разворачивании узла является то, что в данный узел вложен один элемент и он является фиктивным элементом.
Загрузка TreeView в отдельном потоке все равно потребует синхронизации с основным потоком (не получится обратиться к TreeView из другого потока), поэтому польза от этого дела сомнительна. Кроме того, нагрузку на сервер это не уменьшит.
Автор: 085
Дата сообщения: 24.03.2009 14:34
Люди,вот например есть Membership.CreateUser-добавляет в хранилише данных нового юзера. А вот что за хранилище данных и как с ним работать?? Мсдн читал, ничего не понял((

Добавлено:
заранее спасибо
Автор: 085
Дата сообщения: 24.03.2009 20:49
сам разобрался, вроде бы.Хранилище указываем в connectionStringName в разделе membership.Получается,что для <asp:CreateUserWizard указ. этот провайдер и всё работает само собой,надеюсь((
Автор: bbEye
Дата сообщения: 25.03.2009 12:18
Поделитесь, плиз, опытом, кто как играет звуки в приложении WinForms ...
Стандартные средства имеют свои недостатки:
- SoundPlayer (играет только WAV PCM, не может воспроизводить несколько звуков одновременно)
- SystemSound (ограничен только узким набором системных звуков)

Задача такая: повесить звуки на события программы, чтобы они могли воспроизводиться параллельно (н-р: несколько событий случилось за короткий промежуток времени), при этом минимально использовать native-код (а лучше - совсем не использовать )

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.