如何声明这样的结构?public struct TS
{
  public string T;
  public TS2[] Arr;
}public struct TS2
{
  public string M;
  public int[] Arr;
  public byte[] Data;
}我想发送TS这样的结构,如何实现?注意,数组个数是不定的,但可以有限制.

解决方案 »

  1.   

    在同一个进程,不需要用SendMessage,
    不在同一个进程,你的结构也传不过去(进程隔离的原因)。想传少量数据给另外进程,你可以看看WM_COPYDATA消息,这个消息有特殊处理。
      

  2.   

    回gomoku:    是在同一进程,但是不同线程,我运行SendMessage是在子线程运行,通知主线程的执行创建STA单元的COM对象的.
        或者你有其它方案提议一下吗?
      

  3.   


    1、在UI线程中创建COM对象。
    2、在第二个线程创建之后(运行之前),设定它的AppartmentState为STA:
    thread.SetApartmentState(ApartmentState.STA);
    3、这样第二线程对COM对象的操作,将被Marshal到UI线程中。
      

  4.   

    回cpio:
     如果是C++的话,我就不用在C#里面发问了......
      

  5.   

    回gomoku:  子线程是由Socket异步产生的,并不是自己实例化出来的.所以该线程的ApartmentState默认就是MTA了不能设置.
      我的程序是由Socket异步接收到消息后触发的.郁闷的说
      

  6.   

    你的目的还可以这样达成:随便找一个在UI线程中已经创建的控件(Form,Button,TextBox),用Control.Invoke传入一个委托进行调用。
    Control.Invoke的内部实现是先把委托放在一个链表中,并调用PostMessage通知Control所在的UI线程,
    由UI线程取出委托并予执行。当然你也可以保存一个UI线程的SynchronizationContex,并调用SynchronizationContex.Send来达到同样的目的。
      

  7.   

    回gomoku: 谢谢分享你的经验:)