Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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# 无法处理NLua崩溃_C#_Lua_Nlua - Fatal编程技术网

C# 无法处理NLua崩溃

C# 无法处理NLua崩溃,c#,lua,nlua,C#,Lua,Nlua,我试图在我的C#应用程序上使用lua脚本,但我在运行不同的脚本时遇到问题,当我运行3~4个脚本时,我总是遇到以下异常: 如您所见,我正在“捕获”AccessViolationException异常,以防万一: [HandleProcessCorruptedStateExceptions] public void ExecuteAsync(MyLuaThread thread) { Task.Factory.Star

我试图在我的C#应用程序上使用lua脚本,但我在运行不同的脚本时遇到问题,当我运行3~4个脚本时,我总是遇到以下异常:

如您所见,我正在“捕获”AccessViolationException异常,以防万一:

[HandleProcessCorruptedStateExceptions]
            public void ExecuteAsync(MyLuaThread thread)
            {
                Task.Factory.StartNew(() =>
                {
                    if (Monitor.TryEnter(ObjLocker, new TimeSpan(0, 0, 5)))
                    {
                        try
                        {
                            Thread.Sleep(10);
                            if (ScriptRunning[thread.name])
                            {
                                var result = lua.DoString(thread.code);
                            }
                            Thread.Sleep(10);
                        }
                        catch (AccessViolationException e4)
                        {
                            thread.errors.Add(time() + " - Access Error - " + e4.Message);
                            print("(" + thread.name + ") Access Error - " + e4.Message);
                        }
                        catch (NLua.Exceptions.LuaScriptException e)
                        {
                            thread.errors.Add(time() + " - Script Error - Line: " + e.Message.Substring(e.Message.IndexOf(":")));
                            print("(" + thread.name + ")Line: " + e.Message.Substring(e.Message.IndexOf(":")));
                        }
                        catch (Exception otherEx)
                        {
                            thread.errors.Add(time() + " - Other Error - " + otherEx.Message);
                            print("(" + thread.name + ") Access Error - " + otherEx.Message);
                        }
                        finally
                        {
                            Thread.Sleep(10);
                            Monitor.Exit(ObjLocker);
                        }
                    }
                });
            }
我创建这个小项目是为了向大家展示发生的错误。只需添加3~5个线程并启动它们,崩溃不会超过5秒


小项目链接:

我看不出问题所在,您已将调试器设置为在出现异常时中断,因此它确实存在。如果你想看到你的捕获工作,只需点击继续按钮。线程+lua听起来不太好。是每个线程都有自己的lua状态,还是所有线程都在无锁地编辑同一个lua状态?@RonBeyer这就是问题所在,它不会碰到catch块,如果我不去调试它,只是运行它崩溃的程序。@Rochet2我和NLua的创建者谈过这一点,他说NLua是线程安全的,应该可以工作,他很快就会看到这个小项目,不管怎样,如果我创建不同的Lua状态,它不会崩溃,但我失去了软件的功能,脚本可以在它们之间共享变量和函数。我不认为有问题,你已经设置了调试器,可以在异常时中断,所以确实如此。如果你想看到你的捕获工作,只需点击继续按钮。线程+lua听起来不太好。是每个线程都有自己的lua状态,还是所有线程都在无锁地编辑同一个lua状态?@RonBeyer这就是问题所在,它不会碰到catch块,如果我不去调试它,只是运行它崩溃的程序。@Rochet2我和NLua的创建者谈过这一点,他说NLua是线程安全的,应该可以工作,他很快就会关注这个小项目,无论如何,如果我创建不同的Lua状态,它不会崩溃,但我失去了我的软件的意义,脚本可以在它们之间共享变量和函数。