Здравствуйте! Сегодня: Сб, 21 Сен 2019, Ваш IP: 35.172.100.232 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Общие вопросы программирования
+ Создать новую тему Страница: 1
Тема: Timer · +  +  дата добавления: 08.04.2015 / 21:39
Автор темы:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


Привет всем.. Как дождаться загрузки файла..
Чтоб не было следуещего интервала или цикла или потока...
Сделал через таймер..Но чую не правельно ..
If pss > spisok Then
            Timer1.Stop() 'Timer stop
            Timer1.Enabled = False
 Next
            MsgBox("Timer Stopped...."
 Else
            ' comb = ComboBox1.Items(0)
            Main1()
            pss += 1
            comb = ComboBox1.Items(pss)
End If
Вылезает ошибка.. Файл занят..Увеличил Интервал- пошло..Но коряво..
Циклом вообще пролетает (Функция Main1() )
Может что то есть типо WaitForExit() .(ждать выполнения 1 -ой задачи)?????
В ComboBox1.текст - список (0.1.2.)vbCrLf..
Main1() - прогоняю 3 раза с параметрами ComboBox1.текст + загрузка файла около метра (но это я уменьшу потом батником..)
Это суть проги..
Спасибо...
Технологии: .NET Framework
 
Ответ # 1 # · +  +  дата добавления: 09.04.2015 / 13:19
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Если файл занят - нужен код, в котором идет работа с файлом. Файл может быть не закрыт, поэтому происходит блокировка.
Если через FileStream, то достаточно вызвать Close после того, как работа с файлом будет завершена.
Dim fs As New System.IO.FileStream("G:\123.zip", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Inheritable)

'.. работа с файлом

fs.Close()
Или через Using, тогда можно без Close, поток будет закрыт автоматически в конце работы:
Using fs As New System.IO.FileStream("G:\123.zip", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Inheritable)

'.. работа с файлом

End Using

Что касается организации очереди, то можно использовать Queue.
 
Ответ # 2 # · +  +  дата добавления: 11.04.2015 / 14:52
Автор ответа:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


А может с фтп ??
Надо удалять файл.Каждый раз...??
Где то был код.. не найти..
Конечно это не нет ..Но я думаю ты в КУРСАХ....
 function send_mail($mail_from, $mail_to, $thm, $msg, $picture)
  { if ($path) {  
    $fp = fopen($path,"rb");   
    if (!$fp)   
    { print "Cannot open file";   
      exit();   
    }   
    $file = fread($fp, filesize($path));   
    fclose($fp);   
    }  
    $name = "zamer2015.xls"; // в этой переменной надо сформировать имя файла (без всякого пути)  
    $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    $boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
    $headers    = "MIME-Version: 1.0;$EOL";   
    $headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
    $headers   .= "From: $mail_from";  
      
    $multipart  = "--$boundary$EOL";   
    $multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом html-части 
    $multipart .= chunk_split(base64_encode($html));   

    $multipart .=  "$EOL--$boundary$EOL";   
    $multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 
    $multipart .= chunk_split(base64_encode($file));   

    $multipart .= "$EOL--$boundary--$EOL";   
      
        if(!mail($mail_to, $thema, $multipart, $headers)) 
		//echo('<font color=FF0000>Неверно введено (или не введено) кол-во сообщений</font>');
         {return False;           //если не письмо не отправлено
      }  
    else { //// если письмо отправлено
	echo('<center><b><font color=#00FF00>Сообщение успешно отправлено</font></b></center>');
    return True;  
    }  
  exit;  
  }
 
Ответ # 3 # · +  +  дата добавления: 11.04.2015 / 15:15
Автор ответа:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


У меня примерно такой вариант...
 Sub Main1()
        '  Dim myProcess As Process = New Process()
        ' Dim index As Integer = 0    
        '   Do While index < ComboBox1.Items.Count - 1
        ' If index > spisok Then
        ' Exit Do
        ' End If
        '  Debug.Write(index.ToString & " ")
        ' index += 1
        '  comb = ComboBox1.Items(index)
        '  For i As Integer = 0 To ComboBox1.Items.Count - 1 'Step 1
        'split(i)
        '   MsgBox(i)

        If pss = ComboBox1.Items.Count - 1 Then
            '  pss += 1
            '   comb = ComboBox1.Items(pss)
            '  countup()
            MsgBox("Timer Stopped...." & vbCrLf & _
               "РАЗОСЛАНО" & vbCrLf & spisok + 1 & "  MESSAGI")
            Return
        End If
1:      Try
            '   ProgressBar1.Value = 3
            Dim Proxy As String = TextBox2.Text
            Dim Handler As New HttpClientHandler
            '  ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Создаю ПОСТ Запрос"))
            If TextBox2.Text = "" Then
                Handler.UseProxy = False
            Else
                Handler.Proxy = New WebProxy(Proxy)
                ' Dim Handler As New HttpClientHandler With {.Proxy = New WebProxy("http://172.20.133.199:3128", False), .UseProxy = True}
                ' Handler.Proxy = New WebProxy("http://172.20.133.199:3128", False)
                Handler.UseProxy = True
            End If
            Dim client As New System.Net.Http.HttpClient(Handler)
            Dim content As New System.Net.Http.MultipartFormDataContent()
            'параметры
            Dim stringContent As New System.Net.Http.StringContent(comb)
            stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            stringContent.Headers.ContentDisposition.Name = "mail_from"
            content.Add(stringContent)

            stringContent = New Net.Http.StringContent(comb)
            stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            stringContent.Headers.ContentDisposition.Name = "mail_to"
            content.Add(stringContent)

            stringContent = New System.Net.Http.StringContent("JOBS")
            stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            stringContent.Headers.ContentDisposition.Name = "mail_subject"
            content.Add(stringContent)

            stringContent = New System.Net.Http.StringContent("СВЕЖАК")
            stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            stringContent.Headers.ContentDisposition.Name = "mail_msg"
            content.Add(stringContent)

            'файл
            ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Загружаю ФАЙЛ"))
            Dim fs As New System.IO.FileStream("C:\FTP Settings\pass.rar", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Inheritable)
            Dim streamContent As New System.Net.Http.StreamContent(fs)

            streamContent.Headers.ContentType = New System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream")
            streamContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
            streamContent.Headers.ContentDisposition.Name = "mail_file"
            streamContent.Headers.ContentDisposition.FileName = "C:\FTP Settings\pass.rar"

            content.Add(streamContent)

            'отправляем асинхронный запрос
            ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Отправляю"))
            client.PostAsync("http://mskpsk.webege.com/images/simple_mail.php", content)
            ' Main1()
            pss += 1
            BackgroundWorker1.ReportProgress(0)
            comb = ComboBox1.Items(pss)
            countup()
            ' Application.DoEvents()
            ' myProcess.Start()
            '  DoIndependentWork()
            'client.PostAsync.WaitForExit()
            '  ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- ВСЕ ОТЛИЧНО!!! Смотрим свое МЫЛО!!"))
            'Label3.Text = "Все заебок"
            '  Label3.ForeColor = Color.Red
            '  ProgressBar1.Value = 10
            ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Удаляем папку ""C:\FTP Settings"""))
            ' If IO.Directory.Exists("C:\FTP Settings") Then
            'IO.Directory.Delete("C:\FTP Settings", True)
            '  End If
            '  ProgressBar1.Value = 0
            ' For i = 0 To ListBox1.Items.Count - 1
            'ListBox1.Text = ListBox1.Items(i)
            'ListBox1.ClearSelected()
            '  Next
        Catch ex As Exception
            '  thread.Sleep(1000)
            '  ProgressBar1.Value = 0
            '   GoTo 1
            ' Main1()
            MsgBox(ex.Message)
            ' Label3.Text = ex.Message
            '  Label3.ForeColor = Color.Red
        End Try
        '  ProgressBar1.Value = 10
        '   Next
        ' Loop
    End Sub
    Sub DoIndependentWork()
        Label3.Text &= "Working . . . . . . ." & vbCrLf
        Label3.ForeColor = Color.Red
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If pss > spisok Then
            Timer1.Stop() 'Timer stop
            Timer1.Enabled = False
            ProgressBar1.Value = 0
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Спасибо и Досвидос"))
            For i = 0 To ListBox1.Items.Count - 1
                ListBox1.Text = ListBox1.Items(i)
                ListBox1.ClearSelected()
            Next
            MsgBox("Timer Stopped...." & vbCrLf & _
                   "РАЗОСЛАНО" & vbCrLf & spisok + 1 & "  MESSAGI")
            Button1.Enabled = True
            Button2.Enabled = True
        Else
            ' comb = ComboBox1.Items(0)
            Main1()
            pss += 1
            comb = ComboBox1.Items(pss)
            countup()
            ' main()
        End If
    End Sub
    Public Sub WriteGoodCountSub()
        If Not (Me.InvokeRequired) Then
            Label2.ForeColor = Color.Red
            Label2.Text = comb.ToString
        Else
            Me.Invoke(New WriteGoodCount(AddressOf WriteGoodCountSub))
        End If
    End Sub
Как бы разные варианты делал ..В цикле в потоке ..И т.д.Что посоветуешь ?
Файл грузится БАТНИКОМ (Создается папка и потом удаляется..)
Технологии: .NET Compact Framework (.NET CF)
 
Ответ # 4 # · +  +  дата добавления: 11.04.2015 / 19:00
Автор ответа:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


//удаляем файлы через 60 сек.
//if (time_nanosleep(5, 0)) {
       // unlink($filepath);
//}
// удаление файла
Как то так....??
 
Ответ # 5 # · +  +  дата добавления: 12.04.2015 / 11:20
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Если код отправки поместить в отдельную функцию, то можно использовать Await и подождать получение результата (см. строки 1 и 64):
Private Async Function Send() As Task
  If pss = ComboBox1.Items.Count - 1 Then
    '  pss += 1
    '   comb = ComboBox1.Items(pss)
    '  countup()
    MsgBox("Timer Stopped...." & vbCrLf & _
        "РАЗОСЛАНО" & vbCrLf & spisok + 1 & "  MESSAGI")
    Return
  End If
1:  Try
    '   ProgressBar1.Value = 3
    Dim Proxy As String = TextBox2.Text
    Dim Handler As New HttpClientHandler
    '  ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Создаю ПОСТ Запрос"))
    If TextBox2.Text = "" Then
      Handler.UseProxy = False
    Else
      Handler.Proxy = New WebProxy(Proxy)
      ' Dim Handler As New HttpClientHandler With {.Proxy = New WebProxy("http://172.20.133.199:3128", False), .UseProxy = True}
      ' Handler.Proxy = New WebProxy("http://172.20.133.199:3128", False)
      Handler.UseProxy = True
    End If
    Dim client As New System.Net.Http.HttpClient(Handler)
    Dim content As New System.Net.Http.MultipartFormDataContent()
    'параметры
    Dim stringContent As New System.Net.Http.StringContent(comb)
    stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    stringContent.Headers.ContentDisposition.Name = "mail_from"
    content.Add(stringContent)

    stringContent = New Net.Http.StringContent(comb)
    stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    stringContent.Headers.ContentDisposition.Name = "mail_to"
    content.Add(stringContent)

    stringContent = New System.Net.Http.StringContent("JOBS")
    stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    stringContent.Headers.ContentDisposition.Name = "mail_subject"
    content.Add(stringContent)

    stringContent = New System.Net.Http.StringContent("СВЕЖАК")
    stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    stringContent.Headers.ContentDisposition.Name = "mail_msg"
    content.Add(stringContent)

    'файл
    ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Загружаю ФАЙЛ"))
    Dim fs As New System.IO.FileStream("C:\FTP Settings\pass.rar", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Inheritable)
    Dim streamContent As New System.Net.Http.StreamContent(fs)

    streamContent.Headers.ContentType = New System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream")
    streamContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    streamContent.Headers.ContentDisposition.Name = "mail_file"
    streamContent.Headers.ContentDisposition.FileName = "C:\FTP Settings\pass.rar"

    content.Add(streamContent)

    'отправляем асинхронный запрос
    ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Отправляю"))




    Dim result = Await client.PostAsync("http://mskpsk.webege.com/images/simple_mail.php", content)
    fs.Close()






    ' Main1()
    pss += 1
    BackgroundWorker1.ReportProgress(0)
    comb = ComboBox1.Items(pss)
    countup()
    ' Application.DoEvents()
    ' myProcess.Start()
    '  DoIndependentWork()
    'client.PostAsync.WaitForExit()
    '  ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- ВСЕ ОТЛИЧНО!!! Смотрим свое МЫЛО!!"))
    'Label3.Text = "Все заебок"
    '  Label3.ForeColor = Color.Red
    '  ProgressBar1.Value = 10
    ' ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Удаляем папку ""C:\FTP Settings"""))
    ' If IO.Directory.Exists("C:\FTP Settings") Then
    'IO.Directory.Delete("C:\FTP Settings", True)
    '  End If
    '  ProgressBar1.Value = 0
    ' For i = 0 To ListBox1.Items.Count - 1
    'ListBox1.Text = ListBox1.Items(i)
    'ListBox1.ClearSelected()
    '  Next
  Catch ex As Exception
    '  thread.Sleep(1000)
    '  ProgressBar1.Value = 0
    '   GoTo 1
    ' Main1()
    MsgBox(ex.Message)
    ' Label3.Text = ex.Message
    '  Label3.ForeColor = Color.Red
  End Try
  '  ProgressBar1.Value = 10
  '   Next
  ' Loop
End Function
 
Ответ # 6 # · +x1 +  дата добавления: 23.04.2015 / 18:28
Автор ответа:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


Подгрузил через консоль..
install-package Microsoft.Bcl.Async –pre
заработала в таком варианте.
 Dim response As HttpResponseMessage = client.PostAsync(New Uri("http://mssimple_mail.php"), content).Result
Технологии: .NET Framework
 
Ответ # 7 # · +  +  дата добавления: 24.04.2015 / 12:06
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Да, Await оказывается только в .NET 4.5 стал доступен. А для 4.0 придется библиотеку Microsoft.Bcl.Async устанавливать, либо писать чуть больше кода.
 
Страница: 1 + Создать новую тему