public int IndexOfKey(string key, KeyAccess access)
        {
            try
            {
                Lock();
                string downloadID;
                switch (access)
                {
                case KeyAccess.FileHash:
                    if (m_FileHash.TryGetValue(key, out downloadID))
                    {
                        return(m_DownloadID.IndexOfKey(downloadID));
                    }
                    return(-1);

                case KeyAccess.OnceHashedFileHash:
                    if (m_OnceHashedFileHash.TryGetValue(key, out downloadID))
                    {
                        return(m_DownloadID.IndexOfKey(downloadID));
                    }
                    return(-1);

                case KeyAccess.TwiceHashedFileHash:
                    if (m_TwiceHashedFileHash.TryGetValue(key, out downloadID))
                    {
                        return(m_DownloadID.IndexOfKey(downloadID));
                    }
                    return(-1);

                case KeyAccess.ThriceHashedFileHash:
                    if (m_ThriceHashedFileHash.TryGetValue(key, out downloadID))
                    {
                        return(m_DownloadID.IndexOfKey(downloadID));
                    }
                    return(-1);

                default:
                    return(m_DownloadID.IndexOfKey(key));
                }
            }
            finally
            {
                Unlock();
            }
        }