我有一个应用程序可以在10毫秒的周期内工作(每10毫秒运行一次所有的功能,所以它几乎像嵌入式控制器一样)。我的代码中有一个函数比我想要的更昂贵(就执行时间而言)。此函数称为sendECSResponce
(这通过TCP / IP向客户端发送字符串,我没有包含代码)。为了让我的应用程序亮起,我将这个函数解耦并将其放在一个名为sendMessage
的不同线程中。我创建了一个函数,它将抛出一个名为的事件(这已经从文章中引用,下面是代码)
public class EventThrower
{
public delegate void EventHandler(object sender, EventArgs args);
public event EventHandler ThrowEvent = delegate { };
public void SomethingHappened()
{
ThrowEvent(this, new EventArgs());
}
}
在访问我需要的事件时(下面是一个例子)
public class SomeOtherClass
{
private ATCom.Classes.EventThrower _Thrower = new ATCom.Classes.EventThrower();
public void SendMessagetoECS()
{
string msg = Globals.gMessageForECS;
//_Thrower = new EventThrower();
//using lambda expression..could use method like other answers on here
_Thrower.ThrowEvent += (sender, args) => { sendECSResponce(msg); };
}
public void localControl()
{
// Decalre ECS message
Globals.gAllocRSPCode = AGV_Rsp_Code.C_ARC_OTHER_CONTROL;
ECSMessage lclCntrl = new ECSMessage();
lclCntrl.ID = MessageID.AT_LOCAL_CONTROL;
lclCntrl.length = 0;
// EVENT: Sending Message
_Thrower.EventThrower();
}
}
在localControl()
中,我抛出一个事件来通过TCP / IP(sendECSResponce(msg)
)发送消息。
现在我启动一个Thread并将函数分配给main函数中的Thread。
private void myMain()
{
System.Threading.Thread mainThread;
System.Threading.Thread sendMessage;
mainThread = new System.Threading.Thread(objectOfSomeClass.mainFunction);
sendMessage = new System.Threading.Thread(objectOfSomeOtherClass.SendMessagetoECS);
mainThread.Start();
sendMessage.Start();
}
代码已编译但不需要。在localControl()
中调用mainThread
时,它不会发送消息。请帮我解决一下这个。