用webbrowse做界面是少不了生成临时的html文件。而现在有了未公开的IPersistStreamInit 接口,这一切就将改变。因为它可以让你直接从内存中加载html文件。
IPersistStreamInit 接代码:
[ComVisible(true), ComImport(), Guid("7FD52380-4E07-101B-AE2D-08002B2EC713"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistStreamInit
{
void GetClassID([In, Out] ref Guid pClassID);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int IsDirty();
void Load([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm);
void Save([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm,
[In, MarshalAs(UnmanagedType.I4)] int fClearDirty);
void GetSizeMax([Out, MarshalAs(UnmanagedType.LPArray)] long pcbSize);
void InitNew();
}
示例代码:
//记得引用 System.Runtime.InteropServices;
UCOMIStream stream = null;
IntPtr buff = Marshal.AllocHGlobal(htmlBytes.Length);//byte[] htmlBytes;
Marshal.Copy(htmlBytes, 0, buff, htmlBytes.Length);
CreateStreamOnHGlobal(buff, true, out stream);
try
{
IPersistStreamInit ips = (IPersistStreamInit)Webbrowse.Document;
ips.InitNew();
ips.Load(stream);
ips = null;
}
catch
{
}
Marshal.FreeHGlobal(buff);