c # - hvordan arbejder Awesomium JSObject jeg kan ikke finde et eksempel

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger Awesomium WebControl på en formular i C #, og jeg forsøger at videregive oplysninger til browseren, at en USB-enhed er blevet tilsluttet. Jeg har USB-detektering, men af ​​en eller anden grund kan jeg ikke bygge en JSObject()]] med værdierne pr. enhed, der er tilsluttet det.


Her er koden, der fyres, når en enhed er tilsluttet computeren


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);


Men når jeg tilføjer et pause punkt på this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js\_arr); js\_arr er et array på 4 med hvor alle værdier er null


Jeg tror, ​​at problemet er min brug af JSObject og Setting værdierne JSObject Extends IDisposable, og jeg skal dog alle tilføje ('key', 'Value'); men metoden er ikke der for mig at bruge

Bedste reference


USB-drev kan nogle gange have en DriveType af DriveType.Fixed i stedet for DriveType.Removable.





Bare for at sikre, at jeg ikke savnede noget, har jeg også taget din kode (minus din Removable betingelse og refererer drive.Name i stedet for drive.VolumeLabel for at få det egentlige drevbogstav for at se hvis jeg kunne få det til at fungere:


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());
}


Og det output:


C:
S:
T:
Y:
Z:


Som jeg forventer. Jeg er stadig ikke sikker på, hvorfor det ikke virker for dig, men det viser at din brug af JSObject er korrekt.