Mar*_*ker 3 c# windows winforms awesomium
我在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);
Run Code Online (Sandbox Code Playgroud)
但是当我在this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr);js_arr中添加一个断点时,是一个4的数组,其中所有值都为null
我认为问题是我使用JSObject和设置值JSObject扩展IDisposable和我虽然我必须所有添加("键","值"); 但是这个方法不适合我使用
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());
}
Run Code Online (Sandbox Code Playgroud)
它输出:
C:\
S:\
T:\
Y:\
Z:\
Run Code Online (Sandbox Code Playgroud)
正如我所料.我仍然不确定为什么它不适合你,但这证明你的使用JSObject是正确的.