如何调用另一个线程中的函数?

时间:2016-05-18 10:30:16

标签: c# multithreading

我正在开展一个类似这样的课程:

public class MatchmakingService  {
    private bool working;
    private List<MatchmakingUser> matchmakingUsers;
    // ...

    public MatchmakingService()
    {
        matchmakingUsers = new List<MatchmakingUser>();
    }

    public void StartService () {
        var thread = new Thread(this.MatchmakingWork);
        working = true;
        thread.Start();
    }

    void MatchmakingWork () {
        while (working)
        {
            // some work
            Thread.Sleep(1000);
        }
    }

    // ...
    public void AddMatchmakingUser(MatchmakingUser user)
    {
        matchmakingUsers.Add(user);
    }
}

现在我担心matchmakingUsers列表,所以我想我只是称这个AddMatchmakingUser在这个服务线程中执行,但是我真的不知道怎么做。我读过Dispatcher课程,但是Unity中的单声道没有它或它完全是一种不同的技术。基本上我想做:

MatchmakingService mmService = new MatchmakingService();
mmService.Start();

// sometime later when needed
mmService.Somehowinvokeinworkingthread(mmService.AddMatchMakingUser(...));

1 个答案:

答案 0 :(得分:0)

只需从任何线程调用AddMatchmakingUser并同步所有访问列表的代码,以防止它们同时发生并导致竞争条件:

public void AddMatchmakingUser(MatchmakingUser user)
{
    lock (matchmakingUsers)
    {
        matchmakingUsers.Add(user);
    }
}

无论何时访问列表,都要在MatchmakingWork内执行相同操作。