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

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:326201
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
สำหรับรุ่น Microsoft Visual Basic .NET ของบทความนี้ ดู311289.

บทความนี้อ้างถึง namespace ไลบรารีคลาสของ Microsoft .NET Framework ต่อไปนี้:
  • System.Runtime.InteropServices

ในกรณีนี้

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

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

back to the top

ฟังก์ชัน wininet

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

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

back to the top

ขั้นตอนการล้างแคชใน 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 Q326201namespace 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 ทั้งหมดได้ถูกลบ
back to the top
ข้อมูลอ้างอิง
ตัวอย่างรหัสในบทความนี้ใช้นั้น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 เว็บไซต์ต่อไปนี้:สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
262110วิธีการล้างแคชเมื่อโปรแกรมประยุกต์ของคุณเป็นโฮสต์การควบคุมเว็บเบราว์เซอร์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาเว็บโดยใช้วิธีแก้ไขปัญหาสำหรับ Microsoft Internet Explorer แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:back to the top

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 326201 - การตรวจสอบครั้งสุดท้าย: 12/07/2015 11:48:39 - ฉบับแก้ไข: 4.0

Microsoft Visual C# .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbcaching kbcominterop kbhowto kbhowtomaster kbwebbrowser kbwininet kbmt KB326201 KbMtth
คำติชม