C# - 通过TCP发送WinForm

Giz*_*zas 0 .net c# serialization winforms

我创建了一个客户端服务器应用程序,它当前能够将消息作为容器发送:

[Serializable]
public class MsgContainer
{
    public string TableName { get; set; }
    public bool SomethingBool { get; set; }
    public DataTable DataTableData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题:根据用户的请求,我希望服务器能够发送表单

public Form requestedForm { get; set; }
Run Code Online (Sandbox Code Playgroud)

问题(因为我已在网上阅读并在我的应用程序中尝试)WinForms不可序列化,这就是为什么我收到以下错误:

System.Runtime.Serialization.SerializationException:在程序集'System.Windows.Forms中输入'System'Windows.Forms.Form',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化.

我的问题有解决方法吗?

Ste*_*ris 5

我强烈建议你找到一种不同的方法,无论你想做什么.表格不可序列化.你可以:

  • 创建一个可序列化的类来传输所有表单信息并基于它重新生成表单.
  • 为表单编写自己的序列化程序和反序列化程序.

无论哪种方式,您都需要克服以下许多问题,例如:

  • 表单中的组件也不可序列化.
  • 每个控件可能具有值或对也需要传输的数据源的绑定.
  • 您可以在表单中包含无限的不同对象和类,这些表单将成为主项目的一部分.一切都需要在服务器和客户端使用的库中.

基本上,这将是你最糟糕的噩梦,经过花费很多时间你可能花费在它上面,你最终会意识到你除了垃圾填充物之外什么都没有.