Мне удалось реализовать его с помощью метода MVVM, где он динамически показывает полученные сообщения (в gif-файле отображается ошибка, поскольку не была создана другая программа, которая будет подключаться, но важно то, что он обновляется).

но я создал еще один, гораздо более простой проект, чтобы провести демонстрацию здесь, на github. В моем проекте создайте класс с именем протокол и вставьте весь главный пример, удалив основную функцию и заменив частные функции на публичные функции, затем внутри моего MainWindow.xaml.cs запустите код
{
public MainWindow()
{
InitializeComponent();
// ANCHOR: logging_init
// Initialize logging with the default configuration
// This may only be called once during program initialization
Logging.Configure(
new LoggingConfig(),
new Protocolo.ConsoleLogger()
);
// ANCHOR_END: logging_init
// ANCHOR: runtime_init
var runtime = new Runtime(new RuntimeConfig { NumCoreThreads = 4 });
// ANCHOR_END: runtime_init
// ANCHOR: create_master_channel
var channel = MasterChannel.CreateTcpChannel(
runtime,
LinkErrorMode.Close,
Protocolo. GetMasterChannelConfig(),
new EndpointList("127.0.0.1:20000"),
new ConnectStrategy(),
new Protocolo.TestListener()
);
// ANCHOR_END: create_master_channel
Task.Run(() =>
{
try
{
Protocolo.RunChannel(channel).GetAwaiter().GetResult();
}
finally
{
// ANCHOR: runtime_shutdown
runtime.Shutdown();
// ANCHOR_END: runtime_shutdown
}
}
);
}
}
Я сделал профили производительности, и RunChannel — это то, что они требуют от процессора.
public static async Task RunChannel(MasterChannel channel)
{
// ANCHOR: association_create
var association = channel.AddAssociation(
1024,
GetAssociationConfig(),
new TestReadHandler(),
new TestAssocationHandler()
);
// ANCHOR_END: association_create
// ANCHOR: add_poll
var poll = channel.AddPoll(association, Request.ClassRequest(false, true, true, true), TimeSpan.FromSeconds(5));
// ANCHOR_END: add_poll
// start communications
channel.Enable();
while (true)
{
//Here there was a switch that read the commands that were entered into the console but it is unnecessary, with the empty while it continues to update
}
}
Я не знаю, почему, но без Хотя полученные сообщения не обновляются (эти сообщения поступают в регистратор), мне нужно всегда поддерживать эту функцию в рабочем состоянии, но я не знаю как это сделать, не потребляя так много процессора
чтобы увидеть сообщения на выходе, вам нужно изменить Console.WriteLine на Debug.WriteLine
class ConsoleLogger : ILogger
{
public void OnMessage(LogLevel level, string message)
{
Console.Write($"{message}");
//this is inside the master example in the github link
}
}
Подробнее здесь: https://stackoverflow.com/questions/694 ... s-with-wpf