以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  .Net框架下的Windows的底层访问  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11859)


--  作者:admin
--  发布时间:11/9/2004 2:26:00 AM

--  .Net框架下的Windows的底层访问


发信人: walts (小天堂), 信区: DotNET        
标  题: .Net框架下的Windows的底层访问
发信站: BBS 水木清华站 (Tue May 15 13:03:03 2001)


/ *只是关于WinForm下的底层访问其他的还是要慢慢积累

   .Net框架创建下的C#是一个目前真正的面向组件的编程语言。
而.Net框架提供的对于WinForm,MS在设计中为了达到使开发者
在使用时有在与使用WebForm编码是相同的舒适感。WinForm变得反而还
不如MFC更容易访问底层系统。但还是可以访问的,源自WinForm
下的每一个控件都有一个Handler的属性,允许访问空间的HWND,
GDI+也提供类似的访问,此外控件具有一个虚拟的WinProc,可
以重载处理WinForm已经不再支持的消息。
---------------------------------------------

下面是一本杂志上的一个很好的例子:
   假如你的应用程序需要消耗许多资源,而C#的GC机制又有
滞后效应(具体的看MSDN,SDK),一般大家可以在重载一个
Dispose()来解决析构函数迟迟不调用的问题,其实还可以对
WM_COMPACTING作响应,当系统探测到内存紧张时WM_COPMACTING
将向所有顶级窗口广播。Win_Form框架没有内建对此消息的支持,
可以实现如下:
public class CompactableForm:System.WinForms.Form{
  private EventHandler handler;

  public  void AddOnCompacting(EnventHandler h){
     handler=(EventHandler)Delegete.Combine(handler,h);
  }
  public void RemoveOnCompacting(EventHandler h){
      handler=(EventHandler)Delegate.Remove(handler,h);
  }


  protect override void OnCompacting(EventArg e){
    //看看Runtime是否释放一些什么
    System.GC.Collect();
    //调用Add的那些消息处理函数
    if(handler!=null) handler(this,e);

   }

  protect override void WndProc(ref Message m){
    case (m.msg)
    {
      case Win_COMPACTING:
           OnCompacting(EventArgs.Empty);
           break;
    }
    base.WinProc();
  }

--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.142.76]
上一篇
返回上一页
回到目录
回到页首



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
7,437.500ms