to goga21cn 你说的就是我想实现的,具体该怎么做,能写个简单的例子吗?只要关键代码就可以了,就像我上面的a,a1,里面写个简单的实现就好
//程序集a1 namespace CTestOne { public class TClassOne : TestIF { public TClassOne() { System.Timers.Timer t = new System.Timers.Timer(2000); t.Interval = 2000; t.AutoReset = true; t.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent); t.Enabled = true; } public void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e) { d("CTestOne"+System.DateTime.Now.ToString()); } } } 里面d("CTestOne"+System.DateTime.Now.ToString()); 这句话是不是有问题?
接口using System;namespace SomethingsBase { /// <summary> /// 接口 /// </summary> public interface ISomething { event EventHandler<ReportStatuEventArgs> ReportStatuEvent; void DoSoething(); void OnDoSomething(ReportStatuEventArgs rsea); } /// <summary> /// 自定义的事件参数 /// </summary> public class ReportStatuEventArgs : EventArgs { public ReportStatuEventArgs(string s) { msg = s; } private string msg; public string Message { get { return msg; } } private DateTime startTime = DateTime.Now; public DateTime StartTime { get { return startTime; } }
} }实现using System; using System.Collections.Generic; using System.Text; using SomethingsBase;namespace DoSomethings { public class DoSomething:ISomething { #region ISomething 成员 public event EventHandler<ReportStatuEventArgs> ReportStatuEvent; public void DoSoething() { //... //某种情况下引发事件 ReportStatuEventArgs e = new ReportStatuEventArgs("做某件事");
应该就是这样吧。
___________________________________
我写的vs2005源代码管理器,只有团队资源管理中源码管理的功能。
http://topic.csdn.net/u/20091203/10/ca40b678-5443-4a18-a9f6-fad9051d0797.html
你说的很对!跟我要说的那个功能一样,我就是想达到这样的功能,让主程序响应程序集的事件,然后通过事件中参数传递,得到程序集的结果,不知道这样子是如果实现的。
(1)myInterFace.Del = aaa; 报错原因是myInterFace.Del 只是定义一下委托的类型,还不是变量所以不能赋值的。可写成 myInterFace.Del myDelegate ; myDelegate=aaa;
(2)感觉定义一个全局变量应该可以实现你的功能。
你说的就是我想实现的,具体该怎么做,能写个简单的例子吗?只要关键代码就可以了,就像我上面的a,a1,里面写个简单的实现就好
namespace CTestOne
{
public class TClassOne : TestIF
{
public TClassOne()
{
System.Timers.Timer t = new System.Timers.Timer(2000);
t.Interval = 2000;
t.AutoReset = true;
t.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
t.Enabled = true;
}
public void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{
d("CTestOne"+System.DateTime.Now.ToString());
}
}
}
里面d("CTestOne"+System.DateTime.Now.ToString()); 这句话是不是有问题?
{
/// <summary>
/// 接口
/// </summary>
public interface ISomething
{
event EventHandler<ReportStatuEventArgs> ReportStatuEvent;
void DoSoething();
void OnDoSomething(ReportStatuEventArgs rsea);
} /// <summary>
/// 自定义的事件参数
/// </summary>
public class ReportStatuEventArgs : EventArgs
{
public ReportStatuEventArgs(string s)
{
msg = s;
}
private string msg;
public string Message
{
get { return msg; }
}
private DateTime startTime = DateTime.Now;
public DateTime StartTime
{
get { return startTime; }
}
}
}实现using System;
using System.Collections.Generic;
using System.Text;
using SomethingsBase;namespace DoSomethings
{
public class DoSomething:ISomething
{
#region ISomething 成员 public event EventHandler<ReportStatuEventArgs> ReportStatuEvent; public void DoSoething()
{
//...
//某种情况下引发事件
ReportStatuEventArgs e = new ReportStatuEventArgs("做某件事");
OnDoSomething(e);
//...
} public void OnDoSomething(ReportStatuEventArgs rsea)
{
EventHandler<ReportStatuEventArgs> handler = ReportStatuEvent;
if (handler != null)
{
handler(this, rsea);
}
} #endregion
}
}主程序using System;
using SomethingsBase;namespace EventTest
{
class Program
{
static void Main(string[] args)
{
//这里可以用反射加载对象,示例为了简单就直接new出来了
ISomething some = new DoSomethings.DoSomething();
//指定事件方法
some.ReportStatuEvent+=new EventHandler<ReportStatuEventArgs>(some_ReportStatuEvent); for (int i = 0; i < 20; i++)
{
some.DoSoething();
System.Threading.Thread.Sleep(500);
} Console.ReadKey();
} static void some_ReportStatuEvent(object sender, ReportStatuEventArgs e)
{
Console.WriteLine(e.Message +" 在 " + e.StartTime.ToString("HH:mm:ss"));
}
}
}执行结果:做某件事 在 16:29:42
做某件事 在 16:29:43
做某件事 在 16:29:44
做某件事 在 16:29:44
做某件事 在 16:29:45
做某件事 在 16:29:45
做某件事 在 16:29:46
做某件事 在 16:29:46
做某件事 在 16:29:47
做某件事 在 16:29:47
做某件事 在 16:29:48
做某件事 在 16:29:48
做某件事 在 16:29:49
做某件事 在 16:29:49
做某件事 在 16:29:50
做某件事 在 16:29:50
做某件事 在 16:29:51
做某件事 在 16:29:51
做某件事 在 16:29:52
做某件事 在 16:29:52
关于事件发布请参考:如何:发布符合 .NET Framework 准则的事件(C# 编程指南)