簡體   English   中英

共享辦公室外接程序中靜態類或變量的范圍

[英]Scope of static class or variable in Shared office Addin

共享加載項 (Word,Outlook)中有一個靜態映射,用於在應用程序運行時存儲一些緩存信息,如下所示:

public static class GlobalVariables
{
    //Key constants
    public static string USER_ACTION = "userAction";

    //private methods
    private static Dictionary<string, Object> globalMap = new Dictionary<string, object>();

    public static Dictionary<string, Object> GlobalMap
    {
        set { globalMap = value; }
        get { return globalMap; }
    }

    public static Object get(string key)
    {
        // custom Implementation
    }

    public static void Add(string key, Object obj)
    {
       //custom implementation
    }
}

我們有一個用例,其中我們使用Outlook發送郵件並對郵件發送執行一些操作,如下所示:

private void adxOutlookAppEvents_ItemSend(object sender, ADXOlItemSendEventArgs e)
    {
        try
        {
            Outlook._MailItem mailItem = e.Item as Outlook._MailItem;
            string action = (string)GlobalVariables.get(GlobalVariables.USER_ACTION);
            if (false == string.IsNullOrEmpty(action))
            {
                this.performUserActionAfterMailSend(action);

        }
        catch (CustomeMessageException ex)
        {
            CommonUtils.iAlert(ex.Message);
        }
        catch (Exception ex)
        {
            CommonUtils.iError(RESOURCE.COMMON_ERROR_MSG);
        }
        finally
        {
            //CommonUtils.releaseComObject(oRecips);
        }

    }

但是在adxOutlookAppEvents_ItemSend()中,當我嘗試獲取GlobalMap時,它返回null 據我所知,靜態變量可以跨線程訪問。 是因為應用程序間通信嗎? 為什么在嘗試訪問GlobalMap時返回null?

我將不勝感激任何幫助

COM加載項被實現為每個主機進程(outlook.exe,msword.exe等)加載的dll。 兩個正在運行的進程之間不會共享任何類。 您需要提出一種不同的存儲機制(注冊表?文件系統?)來共享通用數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM