0

我在 VFP 中有一个应用程序,它正在迁移到 .NET c#,为此我们必须为该应用程序提供桌面

vfp 中的桌面之一:它具有所有菜单,如果该选项在.net 上实现,则这些菜单将所选选项保存在 SQLServer 表中。

wpf 中的桌面二:它有一个计时器,用于读取用户在桌面一(vfp)上单击的选项

如果桌面二找到了一个选项,并且该选项与用户期望的匹配,它会尝试打开该选项并将其设置为最顶层。

这很好用,但有时会抛出一个 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 方法中发生错误。

为什么会发生这个错误?我该怎么做才能防止这个错误?

4

0 回答 0