我想用C#做这样一个函数:
1)回调函数DLL给前台Form操作.
2)申请的调用回调函数在前台申明后使用时,由回调函数定义的一个事务(可以由一个线程DLL内部来触发)
3)前台使用这个函数由事务触发可以自动执行前台FORM的函数体.
例如:
前台要达到这样的效果
enum IEvent { aEvent,bEvent }
static void init(event,handle)//初始传入函数,和操作句柄
{
DLL传入当前句柄和函数地址.如何写?
}static void event(ref IEvent aa,void* obj);//申请函数变量怎样实现
static void event(ref IEvent aa,void* obj)
{
switch(IEvent i)
{
case aEvent:
MessageBox.Show("a Event")
case bEvent:
MessageBox.Show("a Event")
}
}DLL实现部分
static void thread()
{
while (true){
IEv = 满足某种条件,对应产生什么事务并赋值给IEv.
(handle)handle.event((IEvent)线程条件事件传出,(handle)传入句柄);//把句柄回调主窗体的事处处理函数
}
}
刚接触到NET所以请教高手写一个实例来实践.
1)回调函数DLL给前台Form操作.
2)申请的调用回调函数在前台申明后使用时,由回调函数定义的一个事务(可以由一个线程DLL内部来触发)
3)前台使用这个函数由事务触发可以自动执行前台FORM的函数体.
例如:
前台要达到这样的效果
enum IEvent { aEvent,bEvent }
static void init(event,handle)//初始传入函数,和操作句柄
{
DLL传入当前句柄和函数地址.如何写?
}static void event(ref IEvent aa,void* obj);//申请函数变量怎样实现
static void event(ref IEvent aa,void* obj)
{
switch(IEvent i)
{
case aEvent:
MessageBox.Show("a Event")
case bEvent:
MessageBox.Show("a Event")
}
}DLL实现部分
static void thread()
{
while (true){
IEv = 满足某种条件,对应产生什么事务并赋值给IEv.
(handle)handle.event((IEvent)线程条件事件传出,(handle)传入句柄);//把句柄回调主窗体的事处处理函数
}
}
刚接触到NET所以请教高手写一个实例来实践.
解决方案 »
- 谁了解ADO.net实体框架(或者LINQ)?和Nhibernate这样的OR Mapping框架有什么相似和不同点?
- C#能在项目下建立子项目吗?就是说,C#能否在.net开发环境下的解决方案下建立某个已有项目的子项目吗。注意不是子项,而是子项目。
- C#可以问吗? 计算工资系统不知道那里错了,越算越少的,谁能帮我?拜托了各位
- 如何修改硬盘序列号
- 请问如何在类里面得到登陆页面的sesssion参数
- 问一个datagrid过滤数据行的问题,谢谢!
- 为什么我存入sql server表中的数字都被四舍五入了啊?
- 有了string buffer 为什么还需要 string?
- 急:在线等待请问下我怎么将一个从数据库中的取出来的HTML文本在一个<iframe></iframe>显示出来啊,要求显示的是不是HTML代码/,我要求代码
- 寻找visual studio.net 2002产品密钥?
- c#实现多线程读取文件问题
- 关于横向打印汉字
楼主看下这片文章,介绍的很全面。。希望对楼主有帮助
//#region DLL
public delegate void MyCallBackEventHandler(IEvent event, Handle handle);class MyClass
{
public event MyCallBackEventHandler myEventHandler;
private IEvent event;
private Handle handle;
public void Init(IEvent event, Handle handle)
{
this.event = event;
this.handle = handle;
} public void MyThread()
{
while(true){
this.event = ...;
//CallBack
myEventHandler(this.event, this.handle);
}
}
}
//#endregionclass MyForm
{
public void MyCallBackEvent(IEvent event, Handle handle)
{
...
}
public void Run()
{
MyClass myClass = new MyClass();
IEvent event = ...;
Handle handle = ...;
//参数传入DLL
myClass.Init(event, handle);
//委托
myClass.myEventHandler += new MyCallBackEventHandler(this.MyCallBackEvent); Thread td = new Thread(new ThreadStart(myClass.MyThread));
td.Start();
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace CallBk
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public enum IEvent { IWrite,IRead} public delegate void EventObj(ref object sender, ref IEvent op);
public EventObj evobj;
public static packet pk;
public static void Init(object fhandle, object handle)
{
pk = new packet(fhandle, handle);
} public void ShowEventMsg(ref object handle, ref IEvent ev)
{
if (handle == null) return;
switch (ev)
{
case IEvent.IRead:
MessageBox.Show("IRead Event");
break;
case IEvent.IWrite:
MessageBox.Show("IWrite Event");
break;
}
} private void button1_Click(object sender, EventArgs e)
{
evobj = ShowEventMsg;
Init((object)evobj, this);
} private void button2_Click(object sender, EventArgs e)
{
if (pk == null) return;
pk.stop();
}
} public class packet
{
public enum IEvent { IWrite, IRead }
public delegate void EventObj(ref object sender, ref IEvent op);
private EventObj vo;
private object hwnd;
private IEvent ie;
private bool work;
public packet(object fhandle, object handle)
{
vo = (EventObj)fhandle;//无法将类型为“EventObj”的对象强制转换为类型“EventObj”。
hwnd = handle;
ThreadStart ts = new ThreadStart(thread);
Thread t = new Thread(ts);
t.Start();
work = true;
} public void stop() {
work = false;
} public void thread()
{
bool i=true;
while (work)
{
if (i)
{
ie = IEvent.IWrite;
vo(ref hwnd, ref ie);
}
else
{
ie = IEvent.IRead;
vo(ref hwnd, ref ie);
}
i = !i;
Thread.Sleep(2000);
}
}
}
}
我要实现这样一个功能.前台要简单化一个函数就OK,其它不用管后台来操作,后台处理结果前台一个函数根据信息来分别处理一下传出来的信息.现在调试出来上述一条错误
那句错误是没有NEW的原因,但还是很多错误.类型不能共用,如果我的PACKET封装起来的话那应怎样改?
功能己实现了.
public enum IEvent { IWrite, IRead }
public delegate void EventObj(ref object sender, ref IEvent op);
放出来就OK.