Межпроцессное взаимодействие для передачи древовидной структуры - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу перенести дерево объектов пользовательского интерфейса из процесса A в B. То есть процесс B хочет знать расположение окон в процессе A. Я нашел ниже ссылку почти то, что мне нужно, но метод в этой ссылке может только передаватьобъекты с четко определенной структурой. ссылка

Пока я собираюсь перенести древовидную структуру: я заранее не знаю раскладку.

Кто-нибудь может дать мне несколько советов?Большое спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

Я думаю, что ваш проект будет выглядеть так, как показано ниже.Вам может потребоваться пользовательский сериализатор или создать дерево из вашего процесса, который заполняет окна и элементы управления.Не уверен из вашего описания, каков наилучший способ продолжить.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Process process = new Process();

            XDocument doc = new XDocument("root");

            XElement xProcess = SerializeToXml<Process>.Serialize(process);
            doc.Add(xProcess);

        }

    }

    public class SerializeToXml <T>
    {
        public static XElement Serialize(T data)
        {
            StringWriter writer = new StringWriter();
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter xWriter = XmlWriter.Create(writer, settings);


            XmlSerializer serializer = new XmlSerializer(data.GetType());

            serializer.Serialize(xWriter, data);

            XmlReader reader = XmlReader.Create(xWriter.ToString());

            writer.Close();

            return (XElement)XElement.ReadFrom(reader);
        } 
    }
    public class Process
    {
        public List<Window> windows { get; set; }
    }
    public class Window
    {
        public List<Control> controls { get; set; }
    }
    public class Control
    {
    }
}
...