2012-03-09 6 views
3

Я использую Awesomium WebControl на форме в C#, и я пытаюсь передать информацию в браузер, что USB-устройство было подключено, у меня есть USB но по какой-то причине я не могу построить JSObject() со значениями на каждое устройство, подключенное к нему.как работает Awesomium JSObject, я не могу найти пример

Вот код, который срабатывает, когда устройство подключено к компьютеру

JSObject js_obj; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

JSValue[] js_arr = new JSValue[allDrives.Count()]; 

int count = 0; 

foreach (DriveInfo drive in allDrives) 
{ 
    if (drive.IsReady == true) 
    { 
     if (drive.DriveType == DriveType.Removable) 
     { 
      js_obj = new JSObject(); 
      js_obj["Id"] = new JSValue(""); 
      js_obj["TimeAdded"] = new JSValue(""); 
      js_obj["DriveLetters"] = new JSValue(drive.VolumeLabel); 
      js_obj["Port"] = new JSValue(""); 
      js_arr[count] = new JSValue(js_obj); 
      count++; 
     } 
    } 
} 

this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr); 

Но когда я добавить точку останова в this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr); js_arr представляет собой массив из 4 с тем, где все значения равны нулю

Я думаю, что проблема в том, что я использую JSObject и значения параметра JSObject Extends IDisposable, и я, хотя я должен был бы все добавить («ключ», «значение»); но метод для меня не используется

+0

Положите точку останова на 'js_arr [count] = new JSValue (js_obj);', чтобы увидеть, вызвана ли она когда-либо. –

+0

спасибо, черт возьми, я пропустил тот, над которым я работал над этим около 5 часов сегодня, и вчера хороший 8, и даже не думал, что он не входит в цикл, поэтому окна делают что-то неправильно в WMI, а затем –

+0

@ M.Babcock Пожалуйста, заполните и ответьте, что проблема связана с WMI, USB-устройство не всегда приходит, хотя aa Removable Device может появиться, но как исправлено, и я буду использовать его, как бы объект еще не работал в JS, он создает он, но ключи не установлены в JS –

ответ

5

USB-накопители могут иногда иметь DriveTypeDriveType.Fixed, а не DriveType.Removable.


Просто, чтобы убедиться, что я ничего не пропустил, я также принял ваш код (минус ваш Removable состояние и ссылки drive.Name вместо drive.VolumeLabel, чтобы получить реальную букву диска), чтобы увидеть, если я мог бы получить его работать:

JSObject js_obj; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

JSValue[] js_arr = new JSValue[allDrives.Count()]; 

int count = 0; 

foreach (DriveInfo drive in allDrives) 
{ 
    if (drive.IsReady == true) 
    { 
     js_obj = new JSObject(); 
     js_obj["Id"] = new JSValue(""); 
     js_obj["TimeAdded"] = new JSValue(""); 
     js_obj["DriveLetters"] = new JSValue(drive.Name); 
     js_obj["Port"] = new JSValue(""); 
     js_arr[count] = new JSValue(js_obj); 
     count++; 
    } 
} 

foreach (var js_val in js_arr) 
{ 
    if (js_val == null) 
     continue; 

    Trace.WriteLine(js_val.GetObject()["DriveLetters"].ToString()); 
} 

И это выводит:

C:\ 
S:\ 
T:\ 
Y:\ 
Z:\ 

Как я ожидал. Я все еще не уверен, почему он не работает для вас, но это доказывает правильность использования JSObject.

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