2014-01-17 15 views
0

Q-1)当两个端点之间建立连接时,我必须将“lab2”可见性设置为true。但是,当我运行代码它已经可见。如何获取有关两个端点在Socket中成功连接状态的通知?

@ -2)我想在发生任何错误时重试连接。但是,在重试其显示错误[在PresentationFramework.dll中发生'System.InvalidOperationException'类型的未处理异常]的5 - 6次“main.Owner = this;”之后,

请帮忙!

  public MainWindow() 

    { 
     InitializeComponent(); 

     sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);  

     connect(); 

    } 

    public void connect() 
    { 
     try 
     { 
      epLocal = new IPEndPoint(IPAddress.Parse("192.168.1.10"), 1400); 

      sck.Bind(epLocal); 


      epRemote = new IPEndPoint(IPAddress.Parse("192.168.1.20"),1500); 
      sck.Connect(epRemote); 




      buffer = new byte[1500]; 
      sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer); 

      lab2.Visibility = Visibility.Visible; 

     } 
     catch 
     {     
      test(); 
     } 

    } 

    private void test() 
    { 
     timer.Tick += new EventHandler(timer_Tick); 
     timer.Interval = new TimeSpan(0, 0, 5); 
     timer.Start(); 
    } 

    private void timer_Tick(object sender, EventArgs e) 
    { 
     MainWindow main = new MainWindow(); 
     main.Owner = this; 
    } 

回答

0

编辑:您应该使用模型 - 视图 - 视图模型(MVVM)模式来开发WPF应用程序。在MVVWM上搜索关于模式如何工作的信息。

我会创造一个bool DependencyProperty在您的视图模型对象调用IsConnected

public static readonly DependencyProperty IsConnectedProperty = 
    DependencyProperty.Register("IsConnected", typeof(bool), typeof(MyViewModel), new PropertyMetadata(false)); 

public bool IsConnected { 
    get { return (bool) GetValue(IsConnectedProperty); } 
    set { SetValue(IsConnectedProperty, value); } 
} 

接下来,我将创建一个窗口资源BooleanToVisibilityConverter

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BoolToVisible" /> 
</Window.Resources> 

接下来,我会绑定IsConnected属性到您窗口中lab2控件的Visibility属性:

 Visibility="{Binding Converter={StaticResource BoolToVisible}", Path=IsConnected}" 

最后,我会修改连接方法,以便不设置lab2的可见性属性,而是将IsConnected属性设置为true,如果它连接&否则为false。

关于您的计时器,您是否真的需要在每次尝试连接时都继续创建新窗口?你不应该只是创建一个窗口&不断尝试连接?

+0

嘿托尼m对不起WPF新。在MyviewModel和PropertyMetaData中出现错误,名称空间的类型不存在。 – Antisan

+0

可见性=“{绑定IsConnected,转换器= {StaticResource BoolToVisible}}”...和我控制台的属性改变它呢? – Antisan

+0

将“MyViewModel”替换为代码所在的对象的类名称。类型名称是“PropertyMetadata”。我将更正我的回答中的拼写 –

相关问题