2010-07-22 8 views
1

Je suis en train de développer une application fenêtre dans Microsoft Visual C# 2008 express.J'obtiens une erreur d'exécution lorsque je lance l'application.Le contexte 0x3c74b38 est déconnecté. Aucun proxy ne sera utilisé pour traiter la demande sur le composant COM.

string[] diskArray; 
string driveNumber; 
string driveLetter; 

**searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");** 
foreach (ManagementObject dm in searcher1.Get()) 
{ 
    diskArray = null; 
    driveLetter = getValueInQuotes(dm["Dependent"].ToString()); 
    diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(','); 
    driveNumber = diskArray[0].Remove(0, 6).Trim(); 
    if(driveLetter==this._driveLetter) 
    { 
     /* This is where we get the drive serial */ 
     ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 

     foreach (ManagementObject disk in disks.Get()) 
     { 
      if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB") { 
       this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()); 

(dans la ligne en surbrillance)

Contexte 0x3c74b38 est déconnecté. Aucun proxy ne sera utilisé pour traiter la demande sur le composant COM. Cela peut entraîner une corruption ou une perte de données. Pour éviter ce problème, assurez-vous que tous les contextes/appartements restent actifs jusqu'à ce que l'application soit entièrement exécutée avec RuntimeCallableWrappers qui représente les composants COM qui y résident.

Répondre

0

Probablement, vous pouvez trouver dans les exceptions internes une autre, par ex. Cela signifie que vous devez appeler vos méthodes dans un autre thread. Cela signifie que vous devez appeler vos méthodes dans un autre thread. Probablement si vous examinez la pile d'appels, vous trouverez un gestionnaire d'événements qui appelle ce code. Utilisez simplement la méthode Invoke/BeginInvoke pour appeler votre code. Voir l'exemple ci-dessous:

if (this.InvokeRequired) // in some cases this condition will not work 
{ 
    this.BeginInvoke(new MethodInvoker(delegate() { this.Your_Method(); })); 
    return; 
} 

J'ai rencontré une erreur similaire lorsqu'un périphérique USB a été déconnecté. Mais dans mon cas, je l'ai eu dans une classe d'enveloppement WMI autogérée que j'ai appelée dans le gestionnaire d'événements LibUsbDotNet.