วิธีการล้างแคชเมื่อโปรแกรมประยุกต์ของคุณเป็นโฮสต์ให้ตัวควบคุมเว็บเบราว์เซอร์ใน Visual .NET c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 326201 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความที่มีการทีละขั้นตอนนี้อธิบายวิธีการใช้ WinInet โปรแกรมประยุกต์โปรแกรมอินเทอร์เฟซ (API) ฟังก์ชันการล้างแคชโดยตรง

คุณอาจต้องล้างแคชโดยทางโปรแกรมเมื่อโปรแกรมประยุกต์ของคุณเป็นโฮสต์การควบคุมเว็บเบราว์เซอร์ อย่างไรก็ตาม ลักษณะการทำงานนี้ไม่พร้อมใช้งานผ่านทางอินเทอร์เฟซของตัวควบคุมเว็บเบราว์เซอร์

ฟังก์ชัน wininet

เมื่อต้องการล้างแคช โดยตรง คุณสามารถใช้ฟังก์ชัน WinInet ต่อไปนี้:
  • ใช้แบบFindFirstURLCacheEntryฟังก์ชันการค้นหารายการแรกของแคช
  • ใช้แบบFindNextUrlCacheEntryฟังก์ชันการระบุถึงแคช
  • ใช้แบบDeleteUrlCacheEntryฟังก์ชันการลบรายการแต่ละรายการ
ตัวอย่างรหัสในบทความนี้ใช้ฟังก์ชันเหล่านี้ทั้งหมด

หมายเหตุ:: ฟังก์ชันเหล่านี้จะพร้อมใช้งานกับ 5 Explorer อินเทอร์เน็ตของ Microsoft เท่านั้น ดังนั้น คุณต้องรวมเช็คที่เหมาะสม (ซึ่งรวมถึงตัวอย่างรหัสในบทความนี้) เพื่อป้องกันไม่ให้ข้อผิดพลาด

ขั้นตอนการล้างแคชใน Visual .NET c#

เมื่อต้องการใช้ฟังก์ชัน WinInet Visual .NET c# เพื่อยกเลิกเลือกทั้งหมดของแฟ้มในแคช ดำเนินการดังต่อไปนี้:
  1. เริ่ม Microsoft Visual Studio .NET
  2. ในการแฟ้ม:เมนู ให้ชี้ไปที่ใหม่แล้ว คลิกProject.
  3. ในการโครงการใหม่กล่องโต้ตอบ คลิกแสดงโครงการ c#ภายใต้ชนิดโครงการแล้ว คลิกแอพลิเคชันของคอนโซลภายใต้แม่แบบ.
  4. เพิ่มรหัสต่อไปนี้เป็นคลาส Class1.cs:
    using System;
    using System.Runtime.InteropServices;
    
    // Visual C# version of Q326201
    namespace Q326201CS
    {
        // Class for deleting the cache.
        class DeleteCache
        {
            // For PInvoke: Contains information about an entry in the Internet cache
            [StructLayout(LayoutKind.Explicit, Size=80)]
            public struct INTERNET_CACHE_ENTRY_INFOA
            {
                [FieldOffset(0)]  public uint dwStructSize;
                [FieldOffset(4)]  public IntPtr lpszSourceUrlName;
                [FieldOffset(8)]  public IntPtr lpszLocalFileName;
                [FieldOffset(12)] public uint CacheEntryType;
                [FieldOffset(16)] public uint dwUseCount;
                [FieldOffset(20)] public uint dwHitRate;
                [FieldOffset(24)] public uint dwSizeLow;
                [FieldOffset(28)] public uint dwSizeHigh;
                [FieldOffset(32)] public FILETIME LastModifiedTime;
                [FieldOffset(40)] public FILETIME ExpireTime;
                [FieldOffset(48)] public FILETIME LastAccessTime;
                [FieldOffset(56)] public FILETIME LastSyncTime;
                [FieldOffset(64)] public IntPtr lpHeaderInfo;
                [FieldOffset(68)] public uint dwHeaderInfoSize;
                [FieldOffset(72)] public IntPtr lpszFileExtension;
                [FieldOffset(76)] public uint dwReserved;
                [FieldOffset(76)] public uint dwExemptDelta;
            }
    
            // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindFirstUrlCacheGroup",
                CallingConvention=CallingConvention.StdCall)]
            public static extern IntPtr FindFirstUrlCacheGroup(
                int dwFlags,
                int dwFilter,
                IntPtr lpSearchCondition,
                int dwSearchCondition,
                ref long lpGroupId,
                IntPtr lpReserved);
    
            // For PInvoke: Retrieves the next cache group in a cache group enumeration
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindNextUrlCacheGroup",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool FindNextUrlCacheGroup(
                IntPtr hFind,
                ref long lpGroupId,
                IntPtr lpReserved);
    
            // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file
            [DllImport(@"wininet", 
                SetLastError=true, 
                CharSet=CharSet.Auto, 
                EntryPoint="DeleteUrlCacheGroup", 
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool DeleteUrlCacheGroup(
                long GroupId,
                int dwFlags,
                IntPtr lpReserved);
    
            // For PInvoke: Begins the enumeration of the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindFirstUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern IntPtr FindFirstUrlCacheEntry(
                [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,
                IntPtr lpFirstCacheEntryInfo,
                ref int lpdwFirstCacheEntryInfoBufferSize);
    
            // For PInvoke: Retrieves the next entry in the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindNextUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool FindNextUrlCacheEntry(
                IntPtr hFind,
                IntPtr lpNextCacheEntryInfo,
                ref int lpdwNextCacheEntryInfoBufferSize);
    
            // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="DeleteUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool DeleteUrlCacheEntry(
                IntPtr lpszUrlName);
    
            [STAThread]
            static void Main(string[] args)
            {
                // Indicates that all of the cache groups in the user's system should be enumerated
                const int CACHEGROUP_SEARCH_ALL = 0x0;
                // Indicates that all the cache entries that are associated with the cache group
                // should be deleted, unless the entry belongs to another cache group.
                const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2;
                // File not found.
                const int ERROR_FILE_NOT_FOUND = 0x2;
                // No more items have been found.
                const int ERROR_NO_MORE_ITEMS = 259;
                // Pointer to a GROUPID variable
                long groupId = 0;
    
                // Local variables
                int cacheEntryInfoBufferSizeInitial = 0;
                int cacheEntryInfoBufferSize = 0;
                IntPtr cacheEntryInfoBuffer = IntPtr.Zero;
                INTERNET_CACHE_ENTRY_INFOA internetCacheEntry;
                IntPtr enumHandle = IntPtr.Zero;
                bool returnValue = false;
    
                // Delete the groups first.
                // Groups may not always exist on the system.
                // For more information, visit the following Microsoft Web site:
                // http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp			
                // By default, a URL does not belong to any group. Therefore, that cache may become
                // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group.			
                enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero);
                // If there are no items in the Cache, you are finished.
                if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    return;
    
                // Loop through Cache Group, and then delete entries.
                while(true)
                {
                    // Delete a particular Cache Group.
                    returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero);
                    if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())
                    {	
                        returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero);
                    }
    
                    if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()))
                        break;
                }
    
                // Start to delete URLs that do not belong to any group.
                enumHandle = FindFirstUrlCacheEntry(null, IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial);
                if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    return;
    
                cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
                cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);
                enumHandle = FindFirstUrlCacheEntry(null, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
    
                while(true)
                {
                    internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(INTERNET_CACHE_ENTRY_INFOA));		
    
                    cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize;
                    returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName);				
                    if (!returnValue)
                    {	
                        returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
                    }
                    if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    {
                        break;
                    }			
                    if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize)
                    {
                        cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
                        cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr) cacheEntryInfoBufferSize);
                        returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);					
                    }
                }
                Marshal.FreeHGlobal(cacheEntryInfoBuffer);		
            }
        }
    }
    					
  5. การคอมไพล์ และเรียกใช้โครงการ
  6. เพื่อยืนยันว่า มีการลบแฟ้มชั่วคราวของอินเทอร์เน็ตในแคชของคุณ ทำตามขั้นตอนเหล่านี้ใน Microsoft Internet Explorer:
    1. ในการเครื่องมือเมนู คลิกตัวเลือกอินเทอร์เน็ต.
    2. ในการแฟ้มอินเทอร์เน็ตชั่วคราวบนพื้นที่นั้นทั่วไปแท็บ คลิกการตั้งค่า.
    3. คลิกดูแฟ้ม. ขอให้สังเกตว่า แฟ้มที่อยู่ในแคช Internet Explorer ทั้งหมดได้ถูกลบ

ข้อมูลอ้างอิง

ตัวอย่างรหัสในบทความนี้ใช้นั้นinteropnamespace ที่เป็นส่วนหนึ่งของการใช้งานจริง Visual Studio .NET สำหรับข้อมูลเพิ่มเติม โปรดแวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft Developer Network (MSDN)::
interoperating ด้วยรหัสที่ไม่มีการจัดการ
.aspx http://msdn2.microsoft.com/en-us/library/sd10k43k (vs.71)
สำหรับข้อมูลเกี่ยวกับการพัฒนา Microsoft .NET ไปที่ MSDN เว็บไซต์ต่อไปนี้:
ศูนย์นักพัฒนากรอบการทำงานของ.NET
http://msdn2.microsoft.com/en-us/netframework/default.aspx
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ของฟังก์ชัน WinInet การแคช ไปที่ MSDN เว็บไซต์ต่อไปนี้:
แค wininet
http://msdn2.microsoft.com/en-us/library/ms965968.aspx
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
262110วิธีการล้างแคชเมื่อโปรแกรมประยุกต์ของคุณเป็นโฮสต์การควบคุมเว็บเบราว์เซอร์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาเว็บโดยใช้วิธีแก้ไขปัญหาสำหรับ Microsoft Internet Explorer แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

คุณสมบัติ

หมายเลขบทความ (Article ID): 326201 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbcaching kbcominterop kbhowto kbhowtomaster kbwebbrowser kbwininet kbmt KB326201 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:326201

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com