gpt4 book ai didi

c# - AppDomain.DoCallBack 返回 System.Runtime.Serialization.SerializationException

转载 作者:行者123 更新时间:2023-11-30 16:06:48 34 4
gpt4 key购买 nike

我不断得到 “System.Runtime.Serialization.SerializationException”类型的异常
发生在 IRCBot.exe 但未在用户代码中处理
来自 AppDomain.DoCallBack

我的代码是

            object result = null;
try {
Console.WriteLine("Attempting to run in sandbox");
sandbox.DoCallBack(() =>
{
Console.WriteLine("Creating thread");
try
{
var scriptThread = new Thread(() =>
{
try
{
Console.WriteLine("Trying");
result = CSharpScript.RunAsync(code).ReturnValue.Result;
}
catch (Exception ex)
{
result = ex.Message;
}
});
scriptThread.Start();

if (!scriptThread.Join(6000))
{
scriptThread.Abort();
AppDomain.Unload(sandbox);
}
}
catch (Exception ex)
{
result = ex.ToString();
}
});
}
catch (Exception e)
{
result = e.ToString();
}

如果这个问题听起来很简短,我很抱歉,但我真的不知道该说些什么。我已经追踪到 DoCallBack 异常的来源。提前谢谢你。

最佳答案

传递给 DoCallback 的委托(delegate)必须代表静态方法或可序列化类上的方法。 C# 编译器为 lambda 表达式自动生成的类不可序列化。您需要自己实现应该在可序列化类上调用的方法,例如

[Serializable]
class CallbackContext
{
public string Code { get; set; }
public void Entry()
{
Console.WriteLine("Creating thread");
try
{
var scriptThread = new Thread(() =>
{
try
{
Console.WriteLine("Trying");
AppDomain.CurrentDomain.SetData("result", CSharpScript.RunAsync(Code).ReturnValue.Result);
}
catch (Exception ex)
{
AppDomain.CurrentDomain.SetData("result", ex.Message);
}
});
scriptThread.Start();

if (!scriptThread.Join(6000))
{
scriptThread.Abort();
AppDomain.Unload(AppDomain.CurrentDomain);
}
}
catch (Exception ex)
{
AppDomain.CurrentDomain.SetData("result", ex.ToString());
}
}
}

...

object result = null;
try {
Console.WriteLine("Attempting to run in sandbox");
CallbackContext ctx = new CallbackContext();
ctx.Code = code;
sandbox.DoCallBack(ctx.Entry);
result = sandbox.GetData("result");
}
catch (Exception e)
{
result = e.ToString();
}

关于c# - AppDomain.DoCallBack 返回 System.Runtime.Serialization.SerializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31776082/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com