我正在制作一个端口扫描程序C#WPF程序,该程序可以扫描我拥有的所有不同服务中的各种IP和端口,并且还将使用Material Design in XAML来获得外观更好的UI。
我的计划是将IP和端口的列表分解成我拥有的各种服务,每个服务一个线程来运行检查。这意味着我将有一个字典对象来处理此问题,一项服务的结果将链接到一些UI组件。
get_text是执行端口扫描的功能,我决定使用数据绑定来更新我的UI。但经过一些研究,似乎:
我试图寻找实现自己想要的方法,而我唯一能想到的就是在我的get_text函数中使用一个switch case语句,因为我有将近20个服务,所以这很麻烦。
下面显示的是我的代码:
namespace PortScanner
{
public partial class MainWindow : Window , INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
tb_portstatus.Text = "Click the button to query ports";
dns_info.Text = tb_portstatus.Text;
DataContext = this;
}
private string _Hello = "Select Workflow Variant:";
public string Hello
{
get { return _Hello; }
set
{
_Hello = value;
OnPropertyChanged();
}
}
private string _Hello2 = "Select Workflow Variant:";
public string Hello2
{
get { return _Hello2; }
set
{
_Hello2 = value;
OnPropertyChanged();
}
}
public void get_text(string ip , string port, string uiref)
{
string command = $"-n {ip} -o {port}";
Process proc = new Process();
proc.StartInfo.FileName = "PortQry.exe";
proc.StartInfo.Arguments = command;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string query_output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
switch (uiref)
{
case "Option 1":
Hello = "Something else";
break;
case "Option 2":
Hello2 = "Something else";
break;
}
}
private void Btn1_Click(object sender, RoutedEventArgs e)
{
Thread query_status = new Thread(() => get_text("127.0.0.0", "8080","Option 1"));
query_status.Start();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
对此将提供任何帮助!
注意:该问题链接到this one。但是我决定改用数据绑定方法,并提供更多上下文,因此我觉得对此提出一个新问题会更合适。