3

我在 C# 的表单上使用 Awesomium WebControl,我试图将信息传递到浏览器中,表明 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);

但是当我在 js_arr 添加一个断点this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr);是一个 4 的数组,其中所有的值都是空的

我认为问题是我使用 JSObject 和设置值 JSObject Extends IDisposable 并且我虽然必须全部 Add("key", "Value"); 但该方法不适合我使用

4

1 回答 1

5

USB 驱动器有时可以有一个DriveTypeofDriveType.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是正确的。

于 2012-03-09T18:23:46.087 回答