时间关键应用程序的事件和多线程

时间:2016-02-19 08:29:14

标签: c# multithreading events

我有一个应用程序可以在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时,它不会发送消息。请帮我解决一下这个。

0 个答案:

没有答案