2

ツリービューがあり、ノードを上に移動する必要がある上矢印を押すと、保護されたメモリの読み取りまたは書き込みを試みたというエラーがランダムに表示されます。Theo 次のコードは、私のアップ ボタン クリック イベントです。

void pbUp_Click(object sender, PActionEventArgs e)
{
    int nIndex = 0;
    int nPrevIndex = 0;
    //Setting the node to the node being moved up.
    FavoriteTreeNode node = tvFavorites.SelectedNode as FavoriteTreeNode;
    nIndex = node.Index;
    FavoriteTreeNode prevNode = null;
    FavoriteTreeNode parentNode = null;
    try
    {
        if (node.Level > 0 && node.Index > 0 )
        {
            //Retrieving the parent node of the favorite if there is on.
            parentNode = node.Parent as FavoriteTreeNode;
            nPrevIndex = nIndex - 1;
            prevNode = parentNode.Nodes[nPrevIndex] as FavoriteTreeNode;
        }
        // the node is the first child of the parent we need to get the parents previous node to insert.
        else if (node.Level > 0 && node.Index == 0)
        {
            parentNode = node.Parent as FavoriteTreeNode;
            //Retrieving the previous node to the selected node being moved.
            nPrevIndex = parentNode.Index - 1;
            prevNode = tvFavorites.Nodes[nPrevIndex] as FavoriteTreeNode;
        }
        else
        {
            nPrevIndex = nIndex - 1;
            prevNode = tvFavorites.Nodes[nPrevIndex] as FavoriteTreeNode;
        }
        //Setting what type of node we are dealing with a folder or favorite.
        if (node.FavoriteType == FavoriteType.Folder.ToString())
        {
                //If the node index is greater than 0 then we know there are nodes above the 
            //currently selected node.
            if (nIndex > 0)
            {
                //Retrieving the previous node to the selected node being moved.
                nPrevIndex = nIndex - 1;
                prevNode = tvFavorites.Nodes[nPrevIndex] as FavoriteTreeNode;
                //Removing the current selected node
                tvFavorites.Nodes.RemoveAt(nIndex);
                //Inserting folder into the previous nodes index. The treeview automatically re-indexes the values.
                tvFavorites.Nodes.Insert(nPrevIndex, node);
            }
        }
        // We are dealing with a favorite.
        else if (node.FavoriteType == FavoriteType.Favorite.ToString())
        {
            //If the previous node is a favorite then we can just move the node up.
            if (prevNode.FavoriteType == FavoriteType.Favorite.ToString())
            {
                if (parentNode != null && node.Index > 0)
                {
                    parentNode.Nodes.RemoveAt(nIndex);
                    parentNode.Nodes.Insert(nPrevIndex, node);
                }
                //The node is under a parent and is the first child.
                else if (parentNode != null && node.Index == 0)
                {
                    parentNode.Nodes.RemoveAt(nIndex);
                    node.ParentPtid = 0;
                    tvFavorites.Nodes.Insert(parentNode.Index, node);
                }
                else
                {
                    //Removing the currently selected node.
                    tvFavorites.Nodes.RemoveAt(nIndex);
                    //Inserting folder into the previous nodes index. The treeview automatically re-indexes the values.
                    tvFavorites.Nodes.Insert(nPrevIndex, node);
                }
              }
              else
              {
                if (parentNode != null)
                {
                    //Removing node from parent node
                    parentNode.Nodes.RemoveAt(nIndex);
                    //Setting the nodes parent ptid to the folder the node is moving to ptid.
                    node.ParentPtid = prevNode.Ptid;
                    prevNode.Nodes.Add(node);
                }
                else
                {
                    //Removing the current selected node
                    tvFavorites.Nodes.RemoveAt(nIndex);
                    parentNode = prevNode;
                    //Setting the nodes parent ptid to the folder ID to indicate the favorite belongs to the folder.
                    node.ParentPtid = parentNode.Ptid;
                    //parentNode doesn't have any children so just add the favorite to the node.
                    parentNode.Nodes.Add(node);
                }
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
    tvFavorites.ExpandAll();
    node.TreeView.SelectedNode = node;
    tvFavorites.Focus();        //WI#18749
}

出力は次のようになります。phoenix.client.teller.start.exe の 0x77202c16 (ntdll.dll) での初回例外: 0xC0000005: アクセス違反の読み取り場所 0x000002c4。タイプ 'System.AccessViolationException' の初回例外が System.Windows.Forms.dll で発生しました タイプ 'System.AccessViolationException' の例外が System.Windows.Forms.dll で発生しましたが、ユーザー コードでは処理されませんでした

追加情報: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。

スレッド 'Win32 スレッド' (0x1cb4) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1804) はコード 0 (0x0) で終了しました。ステップ イン: 非ユーザー コード 'System.Environment.GetResourceStringLocal' をステップ インします ステップ イン: 非ユーザー コード 'System.Reflection.TargetInvocationException.TargetInvocationException' をステップ実行しますdll

追加情報: 呼び出しのターゲットによって例外がスローされました。

スレッド 'Win32 スレッド' (0x1ca4) はコード 0 (0x0) で終了しました。スレッド「メイン スレッド」(0x1c84) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0xedc) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x468) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x104c) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1d88) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1d0c) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1d04) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1cc8) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1cc0) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1cac) はコード 0 (0x0) で終了しました。スレッド「Win32 スレッド」(0x1ca0) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1d10) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1d08) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x1ccc) はコード 0 (0x0) で終了しました。

以下のオプション debug unmanaged を設定しているときに、スタックトレースをプルアップしません

呼び出しスタック ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForSingleObject@12() + 0xc バイト
KernelBase.dll!_WaitForSingleObjectEx@12() + 0x6c バイト
kernel32.dll!_WaitForSingleObjectExImplementation@12() + 0x43 バイト
msvcr100_clr0400.dll !@_EH4_CallFilterFunc@8() + 0x12 バイト user32.dll!_InternalCallWinProc@20() + 0x23 バイト
user32.dll!_UserCallWinProcCheckWow@32() + 0xb3 バイト
user32.dll! DispatchClientMessage@20() + 0x4b バイト
user32.dll!
__fnDWORD@4() + 0x24 バイト ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e バイト
user32.dll!_DispatchClientMessage@20()
user32.dll!_NtUserMessageCall@28() + 0xc バイト user32.dll!_SendMessageWorker@20() - 0x3853 バイト
user32.dll!_SendMessageW@16() + 0x49 バイト [外部コード]

Phoenix.Client.AdGbFavorite.dll!Phoenix.Client.AdGbFavorite.frmFavorites.pbUp_Click(オブジェクト送信者, Phoenix.Windows.Forms.PActionEventArgs e) 行 404 + 0x21 バイト C#

4

0 に答える 0