我在VFP中有一个应用程序,正在迁移到.NET c#,作为这个应用程序的桌面我们必须使用桌面
vfp中的桌面版:它具有所有菜单,如果选项在.net上实现,那些菜单会将所选选项保存在SQLServer表中。
桌面2在wpf中:它有一个计时器,用于读取桌面用户点击的选项(vfp)
如果桌面2找到一个选项,并且此选项与预期用户匹配,则会尝试打开该选项并将其设置为最顶层。
这项工作做得很好但有时会抛出win32异常访问被拒绝
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("MyClass")]
public class DesktopsAux
{
public string[] Desktops;
public string desktopname = "My App! .Net Desktop";
public IntPtr hWnd;
public DesktopsAux()
{
try
{
var q = from d in Process.GetProcesses()
where d.MainWindowTitle.Contains(desktopname)
select d.MainWindowTitle;
Desktops = q.ToArray();
}
catch (NullReferenceException)
{
}
}
public bool DeskTopForUser(string userName)
{
// The error happen here, performing this query
var q = from d in Process.GetProcesses()
where d.MainWindowTitle.Contains(desktopname)
select new {d.MainWindowTitle , d.Handle};
var list = q.ToList();
var q2 = from a in list
where a.MainWindowTitle.Contains(userName)
select a;
if (q2.Count() > 0)
{
hWnd = q2.First().Handle;
return true;
}
return false;
}
}
public class Desktop
{
public string MainWindowTitle { get; set; }
public IntPtr Handle { get; set; }
}
执行查询时,DeskTopForUser方法中发生错误。
为什么会出现这种错误? 如何防止此错误?