как работает Awesomium JSObject, я не могу найти пример - PullRequest
3 голосов
/ 09 марта 2012

Я использую Awesomium WebControl для формы в C # и пытаюсь передать в браузер информацию о том, что USB-устройство подключено, у меня работает USB-обнаружение, но по какой-то причине я не могу создать 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 Расширяет IDisposable, и я, хотя мне нужно было бы все добавить ()", "Значение");но у меня нет способа использовать

1 Ответ

5 голосов
/ 09 марта 2012

USB-накопители иногда могут иметь DriveType из DriveType.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 правильно.

...