2015-04-29 2 views
0

Использование RAPI2 для отправки файла с ПК на удаленное устройство.Использование потоков Перемещение файлов с ПК на удаленное устройство

При использовании линии без Threads, он отлично работает:

RemoteFile.CopyFileToDevice(PdtRemoteDevice, "C:\sample.txt", "\test\sample.txt", True) 

Но когда я пытаюсь поставить эту строку выше внутри Thread, она возвращает ошибку, что устройство не подключено.

Как использовать RAPI2CopyFileToDevice с помощью Thread?

Не использовать Thread сделает приложение похожим на повешенное. Поэтому я не думаю, что пользователь оценил бы приложение, которое, как утверждается, не отвечает.

Мой код:

Imports System.Devices 
Imports System.Devices.RemoteDeviceManager 

Public Class FormHome 
    Dim PdtRemoteDevice As RemoteDevice 
    Dim Devicemanager As New RemoteDeviceManager 

    Private Sub ButtonHomeCopyToDevice_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonHomeCopyToDevice.Click 
     PdtRemoteDevice = Devicemanager.Devices.FirstConnectedDevice 

     If PdtRemoteDevice Is Nothing Then 
     MessageBox.Show("No Device Connected, Please Try Again") 
     Exit Sub 
     Else 
     Dim Th As Thread 
     Th = New Thread(AddressOf UploadDatabase) 
     Th.IsBackground = True 
     Th.Start() 
     End If 
    End Sub 

    Private Sub UploadDatabase() 
     Using PdtRemoteDevice = Devicemanager.Devices.FirstConnectedDevice 
     If Not (PdtRemoteDevice Is Nothing) Then 
      RemoteFile.CopyFileToDevice(PdtRemoteDevice, "C:\sample.txt", "\test\sample.txt", True) 
     End If 
     End Using 
    End Sub 
End Class 
+0

Необходимо передать остальную часть кода, относящегося к этой проблеме. У нас должен быть минимальный, но полный набор кода для работы. – Enigmativity

+0

Код уже добавлен – jaa2013

ответ

0

Попробуйте это и дайте мне знать, если он работает:

Private Sub UploadDatabase() 
    Using rdm As New RemoteDeviceManager 
     Using d As RemoteDevice = rdm.Devices.FirstConnectedDevice 
      If Not (d Is Nothing) Then 
       RemoteFile.CopyFileToDevice(_ 
        d, "C:\sample.txt", "\test\sample.txt", True) 
      End If 
     End Using 
    End Using 
End Sub 
+0

Ошибка, возвращенная на 'rdm As New RemoteDeviceManager'. В нем говорится: 'InvalidCastException был необработанным кодом пользователя'. Он также говорит, что «Указанный приказ недействителен». – jaa2013

+0

Кроме того, ошибка возникает только внутри «потока». – jaa2013

+0

@ jaa2013 - Я не могу проверить код, но вы должны попытаться отладить это самостоятельно. Я собираюсь создать все объекты в новом потоке и не вводить какие-либо проблемы с перекрестными потоками. – Enigmativity

0

Создайте форму, добавьте библиотеку RAPI2 в качестве ссылки, а затем добавить две кнопки и этот код :

Imports System.Devices 
Imports System.Devices.RemoteDeviceManager 
Imports System.Devices.RemoteDevice 
Imports System.Devices.RemoteFile 


Public Class Form1 
    Dim dev As RemoteDevice 
    Dim mgr As New System.Devices.RemoteDeviceManager 


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     dev = mgr.Devices.FirstConnectedDevice 

     If dev Is Nothing Then 
      MsgBox("No device connected") 
     Else 
      MsgBox("Connected to: " & dev.Name) 
     End If 

    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     Dim RAPIfile As RemoteFile 

     dev = mgr.Devices.FirstConnectedDevice 
     Try 
      RAPIfile.CopyFileToDevice(dev, "C:\temp\test1.txt", "\Application\Inventory\test1.txt", True) 
     Catch 
      MsgBox("error") 
     End Try 

     RAPIfile = Nothing 

    End Sub 

End Class