Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的程序在从套接字回调调用函数时挂起?_C#_Sockets_Singleton - Fatal编程技术网

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

C# 为什么我的程序在从套接字回调调用函数时挂起?,c#,sockets,singleton,C#,Sockets,Singleton,我试图从套接字回调函数访问集合类型(ModuleManager.cs)的包装器。每当客户机连接到此套接字时,我希望它提供一些关于自身的数据,以便将它和它的套接字放入ModuleManager private static void AddModule (StateObject state) { string[] ModuleInfo = state.sb.ToString().Split('|'); // Create the module object

我试图从套接字回调函数访问集合类型(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状态中。创建模块,然后将其添加到模块管理器:

    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上的完整项目:


任何帮助都将不胜感激,提前感谢

好的,找到问题了。我没有在不同的线程上监听模块,所以出现了一些奇怪的行为。对不起,这个模糊的问题。我只是不能按我想要的方式来表达。

什么是
ModuleManager.Current.GetModule(module.Name)
正在做什么?可以在应用程序域中共享单例;如果您的项目都加载到同一应用程序域中,则它们可以共享同一个单例。但不清楚你的问题到底是什么。相反,您似乎正在尝试调试程序中的挂起。但是,如果没有一个可靠地重现问题的好程序,我怀疑有多少好的帮助是可能的,更不用说提供帮助了。@Rob,我检查一下以前是否注册过同名的模块。@Peter Duniho,我知道我对这个问题不太清楚。但那是因为我自己也不太明白这个问题。由于某种原因,当我调试ModuleManager.Add()函数时,从套接字回调调用它时,它不会发生任何中断。但当从其他地方调用时,似乎根本没有问题,你的结论是错误的。如果未执行
if
子句,也不会获得日志行。这很可能是因为我在您的代码中找不到任何问题。