0

VFP にアプリがあり、.NET c# への移行プロセスが進行中です。これの aprt として、アプリのデスクトップに移動する必要があります。

vfp のデスクトップ 1: すべてのメニューがあり、オプションが .net に実装されている場合、これらのメニューは選択したオプションを SQLServer テーブルに保存します。

wpf のデスクトップ 2: デスクトップ 1 (vfp) でユーザーがクリックしたオプションを読み取るタイマーがあります。

オプションがデスクトップ 2 によって検出され、このオプションがユーザーの予想と一致する場合、オプションを開いて最上位に設定しようとします。

これはうまくいきますが、時々 win32 Exception Access denied を投げます

[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