gpt4 book ai didi

c# - 将 WPF 按钮设置为在 IConnectionPoint 事件处理程序中可见

转载 作者:行者123 更新时间:2023-11-30 20:10:12 33 4
gpt4 key购买 nike

我对 C# 和 WPF 编程还很陌生,现在这个问题让我很头疼。

程序应该做什么:程序显示一个带有文本框的欢迎屏幕,客户可以在其中输入他的名字。如果设备靠近无线局域网接入点并成功连接,则此主窗口上的“开始”按钮应该可见。

什么不起作用:在事件处理程序中设置按钮可见性。不会应用新样式。此外,如果我在设置可见性属性/属性(?)后尝试调用任何其他代码,它将不会运行(如果我在设置可见性之前放置 MessageBox.Show。如果我在设置之后放置它,它将被显示属性,此代码甚至不会再到达)。

代码:

这是按钮元素:

<Button Height="72" HorizontalAlignment="Center" Margin="319,507,315,0"
Name="buttonStart" VerticalAlignment="Top" Width="168" FontSize="32"
Content="Los geht's" Click="buttonStart_Click" />

这是 MainWindow.xaml.cs 中的事件处理程序注册

public partial class MainWindow : Window, INetworkListManagerEvents
{
private INetworkListManager nlm_;
private IConnectionPoint nlmICP_;
private int nlmCookie_ = 0;

private void InitNetManager()
{
nlm_ = new NetworkListManager();
IConnectionPointContainer icpc = (IConnectionPointContainer)nlm_;
Guid tempGuide = typeof(INetworkListManagerEvents).GUID;
icpc.FindConnectionPoint(ref tempGuide, out nlmICP_);
nlmICP_.Advise(this, out nlmCookie_);
}

最后,事件处理程序:

    public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
if (newConnectivity == NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED ||
((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_NOTRAFFIC) != 0)
{
MessageBox.Show("Disconnected"); // this will code is reached
buttonStart.Visibility = Visibility.Hidden; // this is not getting applied
MessageBox.Show("Disconnected"); // this will code is not reached (stepped with debugger)
}

if ((((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_LOCALNETWORK) != 0) ||
(((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) != 0))
{
MessageBox.Show("Connected"); // see comments above
buttonStart.Visibility = Visibility.Visible;
}
}

就是这样 - 我希望你能帮助我。

非常感谢您的努力!

最佳答案

嗯 - 现在我对回答我自己的问题感到难过,但我解决这个问题的冲动让我一直在谷歌搜索,最后我发现,我只能从 UI 线程更改我的 WPF 元素,但 INetwork-Events 是在不同的线程中调用。

所以我这样解决了:

    public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
if (newConnectivity == NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED ||
((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_NOTRAFFIC) != 0)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(
delegate()
{
buttonStart.Visibility = Visibility.Hidden;
}
));
}
// ...
}

谢谢你的时间:)

关于c# - 将 WPF 按钮设置为在 IConnectionPoint 事件处理程序中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358816/

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