log4net with AsyncCallback C# socket client



我正在制作一个C#的异步套接字客户端。

客户端与Microsoft的链接示例几乎相同: https://learn.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-client-socket-example

我还使用 log4net 进行日志记录,具有以下配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value=".loglogfile.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>

简而言之,上面的配置使日志转到指定的文件,并使用DoAppend将其显示给GUI。

然后,在"连接并接收来自套接字的回调"中。 我打电话给日志。信息,日志。错误等。

在 DoAppend 中:

this.sideLogText.Text += loggingEvent.Level.Name + ' ' + loggingEvent.MessageObject.ToString() + Environment.NewLine;

它是填充 GUI 文本框。 但是我得到错误,"调用线程无法访问此对象,因为其他线程拥有它。

所以,我用了这个:

this.Dispatcher.Invoke(
DispatcherPriority.Normal, (Action)(() =>
{
...write to GUI
}
));

没有错误,但文本没有出现在 GUI 上。 我很困惑。 我在这里错过了什么吗?

尝试将调度程序优先级从"正常"更改为"上下文空闲">

Dispatcher.Invoke(new Action((( => { }(, DispatcherPriority.ContextIdle(;

https://learn.microsoft.com/en-us/dotnet/api/system.windows.threading.dispatcherpriority?redirectedfrom=MSDN&view=netframework-4.7.2

最新更新