【问题标题】:Using Thread Moving Files from PC to Remote Device使用 Thread 将文件从 PC 移动到远程设备
【发布时间】:2015-07-08 04:28:35
【问题描述】:

使用RAPI2 将文件从 PC 发送到远程设备。

当使用没有Threads的线路时,它可以正常工作:

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

但是当我尝试将上面的那条线放在Thread 中时,它会返回设备未连接的错误。

如何使用 Thread 使用 RAPI2CopyFileToDevice

不使用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

【问题讨论】:

  • 您需要发布与此问题相关的其余代码。我们应该有一个最小但完整的代码集来工作。

标签: vb.net multithreading windows-ce rapi


【解决方案1】:

试试这个,让我知道它是否有效:

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

【讨论】:

  • 错误返回rdm As New RemoteDeviceManager。它说,InvalidCastException was unhandled by user code。它还说Specified cast is not valid.
  • @jaa2013 - 我无法测试代码,但您应该尝试自己调试。我要做的是实例化新线程中的所有对象,而不是引入任何跨线程问题。
【解决方案2】:

创建一个表单,添加 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多