2014-02-11 27 views
1

我正在修改C#中的一个旧的大型(未记录)程序,该程序使用API​​在串行总线上进行通信。触发代码的其他部分以继续(C#)

有没有让OnIndication触发SendRepeatRequest继续的方法? 我想避免轮询等待Xms的国旗,因为响应时间差异很大,我需要快速响应。

//Pseudocode 
public void SendRepeatRequest(int X) 
{ 
    SendToAPI(); 
    // Wait until API responds, usually a few ms but can take 1-2min 
    // loop X times 
} 

//this is activated by the API response 
public void OnIndication() 
{ 
// Handle request from API... 
// Tell SendRepeatRequest to continue 
} 

对于如何做到这一点,您有什么建议吗? 谢谢!

+0

'OnIndication'是否在不同于'SendRepeatRequest'的线程上运行? – wdosanjos

+0

尽我所知,他们在同一个线程中运行。 – Fousk

+0

因此,可能你需要做的就是在OnIndication中设置一个标志,然后在SendRepeatRequest等待循环中测试该标志。 – wdosanjos

回答

0

您可能想要查看任务库(在.NET 4.0中的System.Threading.Tasks命名空间下引入)。它具有多种线程操作,可以非常轻松地完成此操作。

我相信下面的部分可能会帮助你(或让你开始)。

public void OnIndication() 
{ 
Task doWork = new Task(() => 
    { 
     // Handle request 
    }); 

    Action<Task> onComplete = (task) => 
    {     
     SendRepeatRequest(X, args) 
    }; 

    doWork.Start(); 

    doWork.ContinueWith(onComplete, TaskScheduler.FromCurrentSynchronizationContext());      
} 
+0

这似乎不能解决OP描述的问题。 – Servy

+0

我不太认为这有效,但我可能是错的。我想的是这样的: '公共无效的SendRepeatRequest(INT X) {SendToAPI(); resp_flag = 0; //等到flag == 1 //发送下一个请求} public void OnIndication() {//处理来自API的请求... flag == 1; } 但是避免了等待功能。 ' – Fousk