C# C:如何在调用事件时退出方法

C# C:如何在调用事件时退出方法,c#,multithreading,smpp,C#,Multithreading,Smpp,我有一个附加事件,如: mySmppClient.evDeliver_Sm += new SmppClient.Deliver_SmEventHandler(mySmppClient_evDeliver_Sm); mySmppClient_evDeliver_Sm(){ // have some code here. } 还有另一种方法,如:选中“发件箱” 应用程序总是选中复选框方法 现在,如果代码调试指针指向check_outbox方法,同时事件触发,那么应用程序就会挂起,因为它开始为my

我有一个附加事件,如:

mySmppClient.evDeliver_Sm += new SmppClient.Deliver_SmEventHandler(mySmppClient_evDeliver_Sm);

mySmppClient_evDeliver_Sm(){
// have some code here.
}
还有另一种方法,如:选中“发件箱”

应用程序总是选中复选框方法

现在,如果代码调试指针指向check_outbox方法,同时事件触发,那么应用程序就会挂起,因为它开始为mymppclient_evDeliver_Sm工作

我的问题是:如果事件触发,那么复选框将完成当前任务,然后它将调用mymppclient\u evDeliver\u Sm


可能吗?或者有其他方法吗?或者我可以同步场景吗

您可能应该在一个新线程中运行mySmppClient\u evDeliver\u Sm,并且可以随时中止它。

创建一个名为KeepRunning的布尔变量,例如,该变量在线程之间共享。在方法内部循环,定期检查布尔变量,如果为false,则退出该方法。在控制线程中,当您希望方法退出时,将布尔变量设置为false。

您可以显示与您报告的问题相关的代码吗?我有下面两行代码,如:mySmppClient.evDeliver_Sm+=new SmppClient.Deliver_smeventhandlermysppclient_evDeliver_Sm;勾选“发件箱”;现在我的应用程序总是通过这些方法。check\u outbox总是在数据库中签入新条目,并在查找时向用户发送短信。check\u outbox只不过是保存一些数据库查询。但问题是,当事件触发应用程序挂起时。因为它的指针指向mySmppClient_evDeliver_Sm方法。请检查\u outbox,方法在哪里?请注意,此处存在同步问题,其中可以读取过时的值。我强烈建议使用CancellationToken,而不仅仅是布尔值。在引擎盖下,它只不过是一个围绕布尔值的包装器,但它将代表您处理同步问题。