2015-06-07 1 views
1

Я пытаюсь сделать функцию для подключения к определенному устройству Bluetooth. Я несколько уверен, что параметр DeviceInformation действителен, поэтому проблема должна быть просто включена в функцию ниже. Через короткий промежуток времени после строки RfcommDeviceService.FromIdAsync(...) я увижу A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll в выводе в Visual Studio, а затем просмотрите The program '...' has exited with code -1 (0xffffffff).. Кроме того, исключение не улавливается try{} catch(Exception e){}, так что это может означать, что проблема возникает в другом месте.'System.IO.FileNotFoundException' после вызова RfcommDeviceService.FromIdAsync (...)

public async Task<bool> Connect(DeviceInformation deviceInformation) 
{ 
    try 
    { 
     await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => 
     { 
      rfcommService = await RfcommDeviceService.FromIdAsync(deviceInformation.Id); 
     }); 
     System.Diagnostics.Debug.WriteLine("edfdshjkfdsklfdjslkf"); 
     if (rfcommService == null) 
     { 
      return false; 
     } 

    System.Diagnostics.Debug.WriteLine(rfcommService.Device.ToString()); 

     await streamSocket.ConnectAsync(
        rfcommService.ConnectionHostName, 
        rfcommService.ConnectionServiceName); 

     dataReader = new DataReader(streamSocket.InputStream); 
     dataWriter = new DataWriter(streamSocket.OutputStream); 
     return true; 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine("Exception while connecting: " + e.Message); 
     Debug.WriteLine(e.StackTrace); 
     return false; 
    } 
} 

У меня также есть следующие Capabilities в Package.appxmanifest:

<Capabilities> 
<Capability Name="internetClientServer" /> 
<DeviceCapability Name="proximity" /> 
    <m2:DeviceCapability Name="bluetooth.rfcomm"> 
    <m2:Device Id="any"> 
     <m2:Function Type="name:serialPort" /> 
    </m2:Device> 
    </m2:DeviceCapability> 
</Capabilities> 
+0

Разное .dll аналогичная проблема http://stackoverflow.com/questions/9729691/an-unhandled-exception-of-type-system-io-filenotfoundexception-occurred-in-unk Также посмотрите на этот https: //social.msdn.microsoft.com/Forums/en-US/86e5fb0b-bc89-42d7-85d4-bd755385044e/a-first-chance-exception-of-type-systemiofilenotfoundexception-occurred-in-mscorlibdll?forum=microsoftdeviceemu –

+1

@ user3956566 После решения этой проблемы, я думаю, проблема заключалась в том, что метод, который я использовал, был эксклюзивным для рабочего стола/планшета WinRT и не работает для телефонов. Наиболее вероятной причиной этого будет, как вы сказали, отсутствие DLL. – njallam

+0

Спасибо за отзыв. –

ответ

1

Оказывается, DeviceInformation сделать соединение Bluetooth для WinRT настольного/планшета, а не телефон. Решение заключалось в использовании метода PeerInformation.

функция теперь выглядит следующим образом:

public async Task<bool> Connect(PeerInformation peerInfo) 
{ 
    streamSocket = new StreamSocket(); 
    try 
    { 
     await streamSocket.ConnectAsync(peerInfo.HostName, "{00001101-0000-1000-8000-00805f9b34fb}"); 
    } 
    catch (System.Exception) 
    { 
     return false; 
    } 
    return true; 
} 

Запись может быть сделана с помощью await streamSocket.OutputStream.WriteAsync(rawMessage.AsBuffer()); . Чтение Я до сих пор не понял, как это сделать, но проблема, с которой я столкнулась с этим вопросом, была решена выше.

Смежные вопросы