c#如何监听一个方法是否被调用

我的项目中引入了一个别人写的dll。我要在项目中监听这个dll中的某个方法(这个方法是个鼠标双击事件),一旦这个方法被执行的时候会返回一个对象,我要在我的项目中得到这个对... 我的项目中引入了一个别人写的dll。
我要在项目中监听这个dll中的某个方法(这个方法是个鼠标双击事件),一旦这个方法被执行的时候会返回一个对象,我要在我的项目中得到这个对象。或者还有什么其他的思路?
求大牛给我指示,或相关代码!能结我问题者100分重赏,决不食言!
dll中双击鼠标的方法:(实际上整个程序都在监听一组快捷键,当快捷键被按下的时候等待这个双击事件发生)
public Image imageProcessBox1_DoubleClick(object sender, EventArgs e)
{
Clipboard.SetImage(m_bmpLayerCurrent);
this.Close();
return m_bmpLayerCurrent;
}
我的监听快捷键方法:
private void StartCapture() {
if (m_frmCapture == null || m_frmCapture.IsDisposed)
m_frmCapture = new FrmCapture();
m_frmCapture.IsCaptureCursor = checkBox_CaptureCursor.Checked;
//当快捷键组合被按下的的时候,将dll中的m_frmCapture调出来,然后等待事件
//imageProcessBox1_DoubleClick的发生,
m_frmCapture.Show();
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
}
求救!求救!求救!求救!求救!求救!求救!求救!求救!
展开
 我来答
351372404
2013-05-18
知道答主
回答量:31
采纳率:0%
帮助的人:10.9万
展开全部
很简单 Observer模式就能满足你 嘎嘎嘎 , 你去百度上搜一下 观察者模式,核心就是委托与事件 就提示到这了 !
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ben
推荐于2017-11-25 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
private void StartCapture() {
if (m_frmCapture == null || m_frmCapture.IsDisposed)
m_frmCapture = new FrmCapture();
m_frmCapture.IsCaptureCursor = checkBox_CaptureCursor.Checked;
//当快捷键组合被按下的的时候,将dll中的m_frmCapture调出来,然后等待事件
//imageProcessBox1_DoubleClick的发生,
m_frmCapture.Show();
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
}

楼上两位的说法,均对于楼主您的内容是无效的
首先我不知道您在说的是什么内容,但是您似乎是要求操作的顺序是按照您的预想中一致

那么您才会说出上面的哪行所谓的我在这里怎么监听

其实到了您这里
您的做法在软件工程中已经不叫做监听了
而叫做等待事件
所以楼上两位的回答均是无用的

所谓事件,观察者模式
均都是对事件,委托的另外一种描述而已,跟您的内容也是没有任何关系的

OK
首先
不要呗楼上两位所蒙蔽.
然后再来看我给您回答

你的做法类似我前阵子做的一个东西
我在做一个XNA游戏
里面有一个连招.也就是所谓的末压技
我监听的事件为
A招数放出如果他在结尾无任何特殊内容出现按出B招数C招数的出招方式,那么该末压技将会被释放

OK

其实我这里需要的内容与您的内容是一模一样的

这里已经不能使用所谓的监听了

为什么呢.因为监听的话即使监听到了鼠标双击
您无法确定他的发生时间戳
您总不能给我自己打上一个时间戳吧?
所以呢
我废话了这么多其实为了让你理解..您要使用的是事件等待.而非监听
改一下您的思路与代码
如果您不理解我的思路
就在仔细阅读我上述的内容以及想法
然后再往下看

m_frmCapture.Show();
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
}

这个方法
记住,用异步
然后呢
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
把这个线程堵住,也就是所谓的
While(true)
{
//这里的内容为,用户按键,查看是否是双击,如果不是,继续等待
}

这样你就把这个线程给堵上了
堵上以后直到是双击就给他跳出循环
你要拿到的操作就OK;额

如果让我给你把伪代码补全.那么就成了
While(true)
{
if(是否是双击)
{
//用户点击的是双击,那么执行你的快捷键内容吧
}
else
{
//什么都不做或者提示用户你的快捷键按错啦!或者继续下一次循环直到用户按了双击鼠标
//其实这里一般都是提示用户..因为快捷键是一次性的,嘛
}
}
好啦...我连游戏出招都用这思路做了..你一个快捷键...
如果有啥不懂的就继续追问

100分..诱惑不小哦
追问
不是等待事件,imageProcessBox1_DoubleClicks事件可以不触发,另外直接加while(true)的话程序会跑死循环,感谢你的帮助。
我是初学者,可能描述的不太清楚,能加下你qq吗,给我稍微讲讲我该怎么解决,或者给我指条路,若能帮我解决,我再加100分
追答
.......................你压根没明白我说撒....

mageProcessBox1_DoubleClicks事件可以不触发

我问你你答/

即使你现在正确抓取到我了点击了两下鼠标我可能是在

private void StartCapture() {
if (m_frmCapture == null || m_frmCapture.IsDisposed)
m_frmCapture = new FrmCapture();
m_frmCapture.IsCaptureCursor = checkBox_CaptureCursor.Checked;
//当快捷键组合被按下的的时候,将dll中的m_frmCapture调出来,然后等待事件
//imageProcessBox1_DoubleClick的发生,
m_frmCapture.Show();
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
}

这个方法之前30分钟就点了你监听到我这个鼠标双击有意义嘛?您自己看看您自己的描述
m_frmCapture.Show();
//我在这里怎么监听imageProcessBox1_DoubleClick的发生?并取到返回值?
}我在这里!如何监听你在一个指定的地点去监听您觉得//您的描述正确么?与其说是监听倒不如说直到您上述的代码执行完毕后才会开始监听这个事件问题是..您做的是快捷键我30分钟前点击两下鼠标打开CF游戏然后呢...我30分钟后不小心按了您描述的快捷键/结果您给我弹出了一个软件..这有点....不太对吧
所以.您的整个思路就是错误的您的问题描述为中双击鼠标的方法:(实际上整个程序都在监听一组快捷键,当快捷键被按下的时候等待这个双击事件发生)当快捷键被按下的时候等待这个双击事件发生)这个是您自己说的话我原样复制粘贴的" 等待" 这个双击事件的发生
其实您的代码已经写完了只是您的调用顺序不同您的代码什么的都是正确的..所以我才没有给您说半点代码.而是再给您纠正您的思维逻辑错误///现在..您想明白了么>我也没有说什么死循环While(true)
{
if(是否是双击)
{
//用户点击的是双击,那么执行你的快捷键内容吧
}
else
{
//什么都不做或者提示用户你的快捷键按错啦!或者继续下一次循环直到用户按了双击鼠标
//其实这里一般都是提示用户..因为快捷键是一次性的,嘛
}
}
这里您看到了有ELSE因为系统级的通信会很多例如:USB发出的信号.显示器,打印机等等您要判断的是哪一个硬件发出的指令;另外还要判断该鼠标是否点击的是指定的FORM或者控件或者指定的应用程序如果不是继续等待鼠标点击到指定的上面明白这个死循环什么意思了吧
好了..如果还有不懂- -就继续问吧/.最近我手机丢了.木有Q所以不好意思了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qwe23069
2013-05-18 · TA获得超过792个赞
知道小有建树答主
回答量:553
采纳率:50%
帮助的人:439万
展开全部
再定义一个有返回值的事件.注册,监听就可以了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式