为什么我的程序在从套接字回调调用函数时挂起?

时间:2016-01-20 20:12:29

标签: c# sockets singleton

我正在尝试从套接字回调函数访问Collection类型(ModuleManager.cs)的包装器。每当客户端连接到这个套接字时,我希望它提供一些关于它自己的数据,并将它放入ModuleManager中。

private static void AddModule (StateObject state)
    {
        string[] ModuleInfo = state.sb.ToString().Split('|');

        // Create the module object.
        Module module = new Module();
        module.Socket = state.workSocket;
        module.Name = ModuleInfo[0];
        module.Plugin = PluginManager.PluginManager.Current.GetPlugin(ModuleInfo[1].Substring(0, ModuleInfo[1].Length - 5));


        File.AppendAllText(@"C:\log.txt", System.DateTime.Now.ToString() + " -> [ModuleFinder] Adding module : " + state.sb.ToString() + Environment.NewLine);
        ModuleManager.Current.Add(module);
    }

所以创建模块的数据基本上都处于状态stringbuilder中。创建模块,然后将其添加到ModuleManager:

    public void Add(Module module)
    {
        File.AppendAllText(@"C:\log.txt", System.DateTime.Now.ToString() + " -> [ModuleManager] Adding Module: " + module.Name + " | " + module.Plugin.Name + Environment.NewLine);
        if (ModuleManager.Current.GetModule(module.Name) == null && PluginManager.PluginManager.Current.GetPlugin(module.Plugin) != null)
        {
            Modules.Add(module);
            File.AppendAllText(@"C:\log.txt", System.DateTime.Now.ToString() + " -> [ModuleManager] Added Module: " + module.Name + " | " + module.Plugin.Name + Environment.NewLine);
        }
    }

正如您可能已经注意到的那样,在此过程中会创建一个日志文件,因为最后一个日志永远不会被附加我得出的结论是该程序被卡住了

Modules.Add(module)

但我不明白为什么。当我检查WebApp以查看是否有任何已注册的模块时,没有结果。

关于git的完整项目:https://github.com/LarsGardien/EniacHome

非常感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

好的,发现了问题。我没有在不同的线程上监听模块,因此出现了一些奇怪的行为。抱歉这个模糊的问题。我只是不能按照我想要的方式......