我有一个用于IP地址输入的XamMaskedInput。看起来像:
背后的代码:
using System;
using System.Diagnostics;
using System.Windows.Controls;
using System.Windows.Input;
using Infragistics.Controls.Editors;
using System.Net;
namespace Customizing.Views
{
/// <summary>
/// Interaction logic for IpRangeFields.xaml
/// </summary>
public partial class IpRangeFields : UserControl
{
public IpRangeFields()
{
InitializeComponent();
}
private void Start_OnLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
var input = (XamMaskedInput) sender;
try
{
var ip = input.Text.Replace("-", ".");
var address = IPAddress.Parse(ip);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Dispatcher.BeginInvoke((Action)(() => input.Focus()));
e.Handled = true;
}
}
}
}
当用户输入错误的IP地址时,它将抛出System.FormatException
。问题是,它多次抛出异常,我的wpf应用程序frizzed。我怎么解决这个问题?
异常发生后,不应该离开输入框。我怎样才能做到这一点?
答案 0 :(得分:4)
您正在注册经常发生的事件,并且您正在使用IPAddress.Parse
,如果它无法解析IP地址,则会引发该事件。
相反,请使用TryParse
:
var ip = input.Text.Replace("-", ".");
IPAddress ipAddress;
if (!IPAddress.TryParse(ip, out ipAddress))
{
// The address is invalid.
}
另一个建议是使用内置验证机制的WPF来验证您的IP。有关如何执行此操作的详情,请参阅this。