gpt4 book ai didi

c# - 从其他线程更新 GUI 控件时如何减少重复?

转载 作者:行者123 更新时间:2023-11-30 22:35:19 26 4
gpt4 key购买 nike

编写服务器应用程序,我的代码开始变得有点……重复……看看:

private void AppendLog(string message)
{
if (txtLog.InvokeRequired)
{
txtLog.Invoke(new MethodInvoker(() => txtLog.AppendText(message + Environment.NewLine)));
}
else
{
txtLog.AppendText(message);
}
}

private void AddToClientsListBox(string clientIdentifier)
{
if (listUsers.InvokeRequired)
{
listUsers.Invoke(new MethodInvoker(() => listUsers.Items.Add(clientIdentifier)));
}
else
{
listUsers.Items.Add(clientIdentifier);
}
}

private void RemoveFromClientsListBox(string clientIdentifier)
{
if (listUsers.InvokeRequired)
{
listUsers.Invoke(new MethodInvoker(() => listUsers.Items.Remove(clientIdentifier)));
}
else
{
listUsers.Items.Remove(clientIdentifier);
}
}

我正在使用 .NET 4.0。仍然没有更好的方法从其他线程更新 GUI 吗?如果它有任何不同,我正在使用 tasks在我的服务器上实现线程。

最佳答案

您可以将重复的逻辑封装在另一个方法中:

public static void Invoke<T>(this T control, Action<T> action) 
where T : Control {
if (control.InvokeRequired) {
control.Invoke(action, control);
}
else {
action(control);
}
}

你可以这样使用:

listUsers.Invoke(c => c.Items.Remove(clientIdentifier));

关于c# - 从其他线程更新 GUI 控件时如何减少重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7465217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com