好的,这将是一个有趣的。我正在我的应用程序中构建身份验证流程。我的应用程序将打开一个带有 webbrowser 元素的模式窗口并浏览到 auth URL。然后它将监视特定字符串的 webbrowser 元素的 URL 更改。当它找到字符串时,它会检索访问代码,关闭窗口,然后将代码返回给父级。我的代码如下:
模态窗口:
public partial class Browser : Window
{
private string code = "";
private Uri navi;
public TwitchBrowser(Uri url)
{
InitializeComponent();
this.navi = url;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
webBrowser.Navigate(this.navi);
webBrowser.Navigating += webBrowser_Navigating;
}
void webBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (e.Uri.ToString().Contains("?code="))
{
this.code = e.Uri.ToString().Split('?')[1].Split('&')[0].Replace("code=", "");
this.DialogResult = true;
}
}
public string result
{
get { return code; }
}
}
来自家长的电话:
string url = ...
Browser browser = new Browser(new Uri(url));
browser.Owner = parent;
if (browser.ShowDialog() == true)
{
password.Password = browser.result;
...
}
当然,我得到的错误是:
DialogResult 只能在 Window 创建并显示为对话框后设置。
有趣的是,该应用程序有效!它获取代码并将其存储在应有的密码字段中。那么错误的意义何在?我的意思是,我知道我可以用 Try-Catch 压制它;但恐怕这是一个更大问题的根源。