Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
jkrnd
58 / 47 / 6
Регистрация: 22.12.2015
Сообщений: 1,103
#1

Обработка не существующего сетевого пути - Visual Basic .NET

11.03.2017, 16:30. Просмотров 206. Ответов 7
Метки нет (Все метки)

Всем здравствуйте.
Есть программа, обращающаяся к файлу, расположенному на удалённом компьютере локальной сети.
В программе постоянно тикает таймер 1 раз в секунду.
Если этот удалённый компьютер выключен (файла с указанным сетевым именем не существует), то при старте программы а также периодически происходят задержки выполнения программы:
vb.net
1
2
3
4
5
6
7
8
9
10
Public Class Form1
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If IO.File.Exists("\\DEAERATOR\D\deaerat.dat") Then
            Label1.BackColor = Color.LightGreen
        Else
            Label1.BackColor = Color.LightPink
        End If
        Label1.Text = Now.Second.ToString
    End Sub
End Class
Допустим у нас в сети нет такого пути ("\\DEAERATOR\D\deaerat.dat"). Тогда при старте Label1.BackColor = Color.LightPink сработает только через несколько секунд. И до этого момента Label1.Text не изменится!
После того как Label1.BackColor = Color.LightPink и побегут секунды в Label1.Text возникают периодические задержки, которые визуализируются "проскоком" значения секунд (после 21, например, выведется не 22, а 27!).
Как этого избежать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2017, 16:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка не существующего сетевого пути (Visual Basic .NET):

Открытие существующего docx - Visual Basic .NET
Есть папка с .docx, папка копируется в другую директорию и docx файлы открываются. Dim FoldDialog As New FolderBrowserDialog If...

Создание класса на основе существующего - Visual Basic .NET
Слышал, что можно создавать свои классы со свойствами уже существующих (кажется, что это называется наследование, я точно не знаю),...

Поиск критического пути. Задачи сетевого планирования. - Delphi
Привет всем! В качестве курсового проекта по предмету моделирование мне была дана тема Поиск критического пути. В общем имеется таблица со...

Обработка файла указанного в пути - C Linux
#include <stdio.h> #include <stdlib.h> #include <math.h> #include "clanfun.h" void main(int argc, char* argv) { int width,...

В чём разница между обычным подключением сетевого диска и подключением сетевого диска при помощи политик? - Администрирование Windows
Вопрос начинающего. В чём разница между обычным подключением сетевого диска и подключением сетевого диска при помощи политик))

Скрипт копирования пути к файлу\папке и вставка пути в письмо Outlook - Visual Basic
Всем доброго времени суток! Помогите, пож-та, разобраться\дописать скрипт. Есть скрипт на открытие\создание нового сообщения в Outlook....

7
Yury Komar
Модератор
2213 / 2018 / 321
Регистрация: 27.01.2014
Сообщений: 3,583
Завершенные тесты: 1
11.03.2017, 17:05 #2
может добавить Application.DoEvents?
1
jkrnd
58 / 47 / 6
Регистрация: 22.12.2015
Сообщений: 1,103
11.03.2017, 17:24  [ТС] #3
Yury Komar, Я ошибся. Не помогло. Срабатывает только если существует такой сетевой комп:
то есть "\\DEAERATOR\D\deaerat1.dat" файла deaerat1.dat не существует, а комп \\DEAERATOR существует
vb.net
1
2
3
4
5
6
7
8
9
10
11
Public Class Form1
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Application.DoEvents()
        If IO.File.Exists("\\DEAERATOR\D\deaerat1.dat") Then
            Label1.BackColor = Color.LightGreen
        Else
            Label1.BackColor = Color.LightPink
        End If
        Label1.Text = Now.Second.ToString
    End Sub
End Class
Добавлено через 7 минут
Yury Komar, впрочем так и без DoEvents всё работает без ощутимых задержек. Тут похоже всё дело в существовании сетевого компа с таким именем.
0
Yury Komar
Модератор
2213 / 2018 / 321
Регистрация: 27.01.2014
Сообщений: 3,583
Завершенные тесты: 1
11.03.2017, 17:35 #4
скорее всего просто задержка при чтении из сети...
может быть в отдельном потоке вам запустить таймер?
1
jkrnd
58 / 47 / 6
Регистрация: 22.12.2015
Сообщений: 1,103
11.03.2017, 17:42  [ТС] #5
Yury Komar, а это идея! Запускать проверку существования пути в отдельном потоке и передавать из него флаг в основной поток.
0
Yury Komar
Модератор
2213 / 2018 / 321
Регистрация: 27.01.2014
Сообщений: 3,583
Завершенные тесты: 1
11.03.2017, 17:54 #6
думаю поможет
0
jkrnd
58 / 47 / 6
Регистрация: 22.12.2015
Сообщений: 1,103
11.03.2017, 18:39  [ТС] #7
Yury Komar, Вот решение:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Class Form1
    Private fFileExist As Boolean
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'запускаем второй поток для проверки существования файла
        Dim thRetard As New MethodInvoker(AddressOf RetardProc)
        thRetard.BeginInvoke(Nothing, Nothing)
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If fFileExist Then
            Label1.BackColor = Color.LightGreen
        Else
            Label1.BackColor = Color.LightPink
        End If
        Label1.Text = Now.Second.ToString
    End Sub
    Sub RetardProc() 'эта процедура будет выполнятся не в основном, а в отдельном потоке 
        'инструкция, "тормозящая" основной поток
        fFileExist = IO.File.Exists("\\DEAERATOR1\D\deaerat.dat")
    End Sub
End Class
Может что не так сделал?

Добавлено через 16 минут
поправлюсь
vb.net
1
2
3
4
5
6
Sub RetardProc() 'эта процедура будет выполнятся не в основном, а в отдельном потоке 
    While (True)
         'инструкция, "тормозящая" основной поток
         fFileExist = IO.File.Exists("\\DEAERATOR1\D\deaerat.dat")
    End While
End Sub
Добавлено через 11 минут
специалисты по потокам, пожалуйста посмотрите, может я накосячил где. Это обязательно должно работать без ошибок
0
jkrnd
58 / 47 / 6
Регистрация: 22.12.2015
Сообщений: 1,103
24.03.2017, 09:44  [ТС] #8
Опробование приведенной выше конструкции приводит к ошибкам:
даже если сетевой путь "\\DEAERATOR\D\deaerat.dat" существует, основной поток почему-то получает периодически fFileExist = False и соответственно говорит, что файла с указанным сетевым путём нет!
Кроме этого файл \\DEAERATOR\D\deaerat.dat используется другими программами (разумеется доступ - Shared), а при запуске моего приложения эти другие программы выводят ошибку "файл не существует". То есть, мой поток RetardProc блокирует доступ к существующему файлу. Почему так происходит непонятно.
Установил задержку в бесконечном цикле While (процедура RetardProc) в 1000 мсек. Описанные ошибки стали появляться реже, но не исчезли совсем.
0
24.03.2017, 09:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2017, 09:44
Привет! Вот еще темы с ответами:

.NET 2.x C# как по сетевом пути файл раздавать в каталоге другом пути - C#
C# как по сетевом пути файл раздавать в каталоге другом пути например foto.jpg находиться по сетевом пути одного ПК ...

Поиск пути к файлам по фрагменту этого пути - Delphi
Здравствуйте. У меня есть код, который удаляет все .txt файлы из определенной папки, конкретно из папки C:\Users\Кирилл\Desktop\66\ ...

Изменение существующего приложения - C++ Builder БД
Не мой был создано простенькое обучающее приложение на c++ builder 6, но сейчас мне нужно изменить его, заменить некоторые фотографии и...

Получение существующего COM объекта. - C#
Можно ли получить уже существующий COM объект или ссылку на него? Например, какое-то приложение создает объект класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru