VS2003 - VS2005 -> DisconnectedContext was detected

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi!

If I do the following in VS2003 it works - and in VS2005 it complains about
a DisconnectedContext...

using (ManagementClass mcDiskDrive = new ManagementClass(@"Win32_Diskdrive"))
{
// mcDiskDrive.GetInstances() is thowing the exception
foreach (ManagementObject moDiskDrive in mcDiskDrive.GetInstances())
{
}
}

Does anyone know what might go wrong?

Thanks
Ralf
 
Hi!

If I switch off the MDA (Debug/Exceptions -> Managed Debugging Assistants)
the Exception RPC_E_WRONG_THREAD shows up.

OK - I understand the problem, but what can I do to resolve it? How can I
marshall the objects into my thread space? Or do I have to do something
different ...?

Thanks in advance
Ralf
 
Hi!
Sorry - my mistake was that I called this method from a message handler of
WndProc ... So I got this cross thread problem.

OK - I have to call Invoke, but now I get the exception: "This method is not
implemented ..." - but it should be there, at least I can call it directly
without problems.

Here is a sample - perhaps someone can direct me to a solution?

public class Form1 : Form
{
public Form1()
{
ShowDrive(); // 1: is working
}
protected override void WndProc(ref Message m)
{
if(m.Msg == WM_DEVICECHANGE)
{
ShowDrive(); // 2: not working -> ShowDriveInvoke();
}
base.WndProc(ref m);
}
private void ShowDrive()
{
using (ManagementClass mc = new ManagementClass(@"Win32_Diskdrive"))
{
foreach (ManagementObject mo in mc.GetInstances()) // -> wrong
thread, clear so far ...
{
...
}
}
}
private void ShowDriveInvoke()
{
using (ManagementClass mc = new ManagementClass(@"Win32_Diskdrive"))
{
// throws Exception -> "This method is not implemented in any
class"
object[] args = {""};
foreach (ManagementObject mo in mc.InvokeMethod("GetInstances",
args) as ManagementObjectCollection)
{
...
}
}
}
}

Thanks a lot

Ralf
 
Hi!

OK - I must have been sleeping ...

public class Form1 : Form
{
public delegate string DelegateGetDrives();

public Form1()
{
}
internal const int WM_DEVICECHANGE = 0x0219;
protected override void WndProc(ref Message m)
{
if(m.Msg == WM_DEVICECHANGE)
{
DelegateGetDrives gdi = new DelegateGetDrives(GetDrives);
IAsyncResult result = gdi.BeginInvoke(null,"");
ShowDrive((string)gdi.EndInvoke(result));
}
base.WndProc(ref m);
}
private void GetDrives()
{
}
...
}

Sorry that I bothered you all with this question - but sometimes ...

Cheers Ralf

Ralf said:
Hi!
Sorry - my mistake was that I called this method from a message handler of
WndProc ... So I got this cross thread problem.

OK - I have to call Invoke, but now I get the exception: "This method is not
implemented ..." - but it should be there, at least I can call it directly
without problems.

Here is a sample - perhaps someone can direct me to a solution?

public class Form1 : Form
{
public Form1()
{
ShowDrive(); // 1: is working
}
protected override void WndProc(ref Message m)
{
if(m.Msg == WM_DEVICECHANGE)
{
ShowDrive(); // 2: not working -> ShowDriveInvoke();
}
base.WndProc(ref m);
}
private void ShowDrive()
{
using (ManagementClass mc = new ManagementClass(@"Win32_Diskdrive"))
{
foreach (ManagementObject mo in mc.GetInstances()) // -> wrong
thread, clear so far ...
{
...
}
}
}
private void ShowDriveInvoke()
{
using (ManagementClass mc = new ManagementClass(@"Win32_Diskdrive"))
{
// throws Exception -> "This method is not implemented in any
class"
object[] args = {""};
foreach (ManagementObject mo in mc.InvokeMethod("GetInstances",
args) as ManagementObjectCollection)
{
...
}
}
}
}

Thanks a lot

Ralf


Ralf said:
Hi!

If I switch off the MDA (Debug/Exceptions -> Managed Debugging Assistants)
the Exception RPC_E_WRONG_THREAD shows up.

OK - I understand the problem, but what can I do to resolve it? How can I
marshall the objects into my thread space? Or do I have to do something
different ...?

Thanks in advance
Ralf
 
Back
Top