Здравствуйте.
Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...
Здравствуйте, КДА, Вы писали:
КДА>Здравствуйте. КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...
КДА>Заранее спасибо!
Используй АПИ функцию CopyFile для копирования
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
' Скопируем файл C:\Samples\temp.txt в C:\Russia\buffer.txt.
' Не будем переписывать файл C:\Russia\buffer.txt если он существует.
Dim retval As Long ' возвращаемое значение
' копируем файл
retval = CopyFile("C:\Samples\temp.txt", "C:\Russia\buffer.txt", 1)
If retval = 0 Then ' если ошибка
Debug.Print "Не могу скопировать файл -- C:\Russia\buffer.txt уже существует.
Else ' если все нормально
Debug.Print "Файл скопирован."
End If
Когда-нибудь и я буду много знать, но пока это не грозит...
ICQ #134433
Здравствуйте, Silent_Sky, Вы писали:
SS>Используй АПИ функцию CopyFile для копирования
SS>Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long SS>' Скопируем файл C:\Samples\temp.txt в C:\Russia\buffer.txt. SS>' Не будем переписывать файл C:\Russia\buffer.txt если он существует. SS>Dim retval As Long ' возвращаемое значение
SS>' копируем файл SS>retval = CopyFile("C:\Samples\temp.txt", "C:\Russia\buffer.txt", 1) SS>If retval = 0 Then ' если ошибка SS> Debug.Print "Не могу скопировать файл -- C:\Russia\buffer.txt уже существует. SS>Else ' если все нормально SS> Debug.Print "Файл скопирован." SS>End If
Я допустил неточность в постановке вопроса (за это прошу прощения). Суть в том, что функция предназначена не для простого копирования... Эту функцию предоставляет компонент (ActiveX DLL), и она не только копирует файл, но и размещает его в БД (в бинарном виде). Но это ну суть важно... Что конкретно делает эта функция я не знаю. Нужно, чтобы она (функция) не мешала окну жить в то время, как она выполняется.
ЗЫ. Все равно спасибо за внимание и ответ
Здравствуйте, КДА, Вы писали:
КДА>Здравствуйте. КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...
КДА>Заранее спасибо!
Еще одним решением является реализация CallBack функции
Посмотри в MSDN этот вопрос достаточно хорошо описан для VB в том числе
Здравствуйте, Toughpheeckouse, Вы писали:
T>Здравствуйте, КДА, Вы писали:
КДА>>Здравствуйте.
КДА>>Заранее спасибо!
T>те тебе нада запускать эту функцию в отдельном потоке
T>вот здесь пример как запускать потоки в VB
Посмотрел пример. Это как раз то что нужно. Большое спасибо!
Здравствуйте, КДА, Вы писали:
КДА>Здравствуйте. КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...
КДА>Заранее спасибо!
Может я немного торможу, но такая проблема частеько решается созданием невидимой НЕМОДАЛЬНОЙ формы, в коде которой запускается фоновая задача. Если неправ — поправьте, пожалуйста.