none
Application.Idle事件,如何写在Form1.cs 和 Form1.Designer.cs文件里? RRS feed

  • 问题

  • Form1.cs文件:
    using System;using System.Windows.Forms;

    namespace AAAA {
        public partial class Form1:Form {
            public Form1(){InitializeComponent();}


       private void ApplicationIdle(object sender, EventArgs e)
       {this.Text=DateTime.Now.ToString();}
        }
    }












     Form1.Designer.cs文件:

    namespace AAAA {
        partial class Form1 {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;

            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
            components.Dispose();
            }
            base.Dispose(disposing);
            }

            #region Windows 窗体设计器生成的代码

            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent() {
            this.SuspendLayout();
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F,12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292,268);
            this.Name = "Form1";
            this.ResumeLayout(false);

            }

     

            #endregion
        }
    }


    那么,Application.Idle事件,如何添加进去?SDK文档太烂了,什么例子都没有。

    当应用程序完成处理并即将进入空闲状态时发生。

    命名空间:System.Windows.Forms
    程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

    语法
    Visual Basic(声明)
    Public Shared Event Idle As EventHandler
     
    Visual Basic(用法)
    Dim handler As EventHandler

    AddHandler Application.Idle, handler

     
    C#
    public static event EventHandler Idle
     
    C++
    public:
    static event EventHandler^ Idle {
     void add (EventHandler^ value);
     void remove (EventHandler^ value);
    }
     
    J#
    /** @event */
    public static void add_Idle (EventHandler value)

    /** @event */
    public static void remove_Idle (EventHandler value)

     
    JScript
    JScript 支持使用事件,但不支持进行新的声明。
     

    备注
    如果您有必须在线程空闲以前执行的任务,请将它们附加到该事件。

    因为这是一个静态事件,所以您必须在 ApplicationExit 事件中分离附加到此事件的任何事件处理程序。如果不分离这些处理程序,它们仍将附加在该事件上并继续占用内存。

    平台
    Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

    .NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。

     


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.2.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.7.60, SQL Server 2000, MySQL 5.0, FireBird 2.1.2, PHP 5.2.4, Office 2007, OpenOffice 3.1和永中Office2009.
    2009年6月25日 8:25

答案

  • 你好!
         在窗体的构造函数中添加这行:
    Application.Idle += new EventHandler(Application_Idle);
         在ApplicationExit的事件处理程序中需要分离事件处理程序:
    Application.Idle-=new EventHandler(Application_Idle);
    Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
    必须分离,不然会发生内存泄露的啊!
    周雪峰
    • 已标记为答案 dvdvip 2009年6月25日 23:52
    2009年6月25日 13:38
    版主
  • public Form1()
    {
          Application.Idle += new EventHandler(Application_Idle);
          Application.ApplicationExit+=new EventHandler(Application_ApplicationExit);
    }
    
    private static void Application_Idle(object sender,EventArgs e)
    {
         ...
    }
    
    private static void Application_ApplicationExit(object sender,EventArgs e)
    {
          Application.Idle-=new EventHandler(Application_Idle);
          Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
    }

          
    周雪峰
    • 已标记为答案 dvdvip 2009年6月27日 1:03
    2009年6月26日 11:48
    版主

全部回复

  • 例如,在当软件完成处理并即将进入空闲状态时, 执行下面这句:

    this.Text=Date.Now.ToString();

    整个事件代码,如何写?


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.2.4, Visual Studio 2005, Eclipse 3.5, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.7.60, SQL Server 2000, MySQL 5.0, FireBird 2.1.2, PHP 5.2.4, Office 2007, OpenOffice 3.1和永中Office2009.
    2009年6月25日 8:40
  • Application.Idle += new EventHandler(Application_Idle);
    知识改变命运,奋斗成就人生!
    2009年6月25日 9:04
    版主
  • 编写事件,给他一个委托就行了。

    //Event

    DoSomething()
    {
    //...
    }

    Application.Idle += new EventHandler(DoSomething)

    我的博客,最近新写了一个Windows Mobile 6.5 Widget开发的文章,欢迎捧场
    尽力回答每一个问题,但不代表一定正确,希望初学者能够多自己尝试。。共勉。。:)
    2009年6月25日 9:51
    版主
  • 你好!
         在窗体的构造函数中添加这行:
    Application.Idle += new EventHandler(Application_Idle);
         在ApplicationExit的事件处理程序中需要分离事件处理程序:
    Application.Idle-=new EventHandler(Application_Idle);
    Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
    必须分离,不然会发生内存泄露的啊!
    周雪峰
    • 已标记为答案 dvdvip 2009年6月25日 23:52
    2009年6月25日 13:38
    版主
  • Form1.cs里:

    using System;using System.Windows.Forms;

    namespace AAAA {
        public partial class Form1:Form {
            public Form1(){InitializeComponent();}


       private void Application_Idle(object sender, EventArgs e)
       {this.Text=DateTime.Now.ToString();}}}





    Form2.Designer.cs里:

    namespace AAAA {
        partial class Form1 {
            private System.ComponentModel.IContainer components = null;

           
            protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
            components.Dispose();
            }
            base.Dispose(disposing);
            }

            #region Windows 窗体设计器生成的代码

            private void InitializeComponent() {
            this.SuspendLayout();
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F,12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292,268);
            this.Name = "Form1";
            this.ResumeLayout(false);
            Application.Idle += new EventHandler(Application_Idle);
            Application.Idle-=new EventHandler(Application_Idle);
            Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
            }

            #endregion
        }
    }


     是这样吗?不对吧?VS 2005提示出错的。


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.2.4, Visual Studio 2005, Eclipse 3.5, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.7.60, SQL Server 2000, MySQL 5.0, FireBird 2.1.2, PHP 5.2.4, Office 2007, OpenOffice 3.1和永中Office2009.
    2009年6月26日 5:32
  • 应该是 在ApplicationExit的事件处理程序中需要分离事件处理程序,你写错位置了:
    Application.Idle-=new EventHandler(Application_Idle);
    Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
    周雪峰
    2009年6月26日 5:57
    版主
  • 还是不明白。 你不可以把全部完整的代码写出来吗?
    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.2.4, Visual Studio 2005, Eclipse 3.5, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.7.60, SQL Server 2000, MySQL 5.0, FireBird 2.1.2, PHP 5.2.4, Office 2007, OpenOffice 3.1和永中Office2009.
    2009年6月26日 8:02
  • public Form1()
    {
          Application.Idle += new EventHandler(Application_Idle);
          Application.ApplicationExit+=new EventHandler(Application_ApplicationExit);
    }
    
    private static void Application_Idle(object sender,EventArgs e)
    {
         ...
    }
    
    private static void Application_ApplicationExit(object sender,EventArgs e)
    {
          Application.Idle-=new EventHandler(Application_Idle);
          Application.ApplicationExit-=new EventHandler(Application_ApplicationExit);
    }

          
    周雪峰
    • 已标记为答案 dvdvip 2009年6月27日 1:03
    2009年6月26日 11:48
    版主
  • 你好,请问一下,Application.Idle主要是在什么情况下使用,跟我直接使用事件区别在哪?刚刚学习.NET,请多多指教,谢谢!
    2011年12月14日 9:02
  • Application.Idle可以共享不同窗口的数据, 和控制空闲时间. 有点像网页跳转, 和线程有点关系, 有点复杂.

    抱歉, 我现在不编程了. 很多都忘记了.

    你问问其他人吧..


    2012年2月9日 3:50