我在 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);
但是当我在
this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr);
处添加断点时,js_arr 是一个 4 的数组,其中所有值都为空我认为问题在于我使用了 JSObject 和设置值 JSObject Extends IDisposable,虽然我必须将所有 Add("key", "Value");但该方法不适合我使用
最佳答案
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
的使用是正确的。关于c# - Awesomium JSObject 如何工作我找不到示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9638816/