gpt4 book ai didi

c# - WPF 使用语句打开另一个窗体

转载 作者:行者123 更新时间:2023-11-30 14:08:32 25 4
gpt4 key购买 nike

我在 Winforms 中编写了一个 C# 应用程序,现在正在用 WPF 重写它。在 Winforms 版本中,我使用以下命令打开另一个窗口,同时向它发送信息并从中接收信息:

using (showSelection showSelection1 = new showSelection(listBox2.SelectedItem.ToString()))
{
showSelection1.ShowDialog();
storage1.showID = showSelection1.showID;
storage1.numOfSeasons = showSelection1.numOfSeasons;

}

这工作正常,我从 listBox2 发送了选定的项目,并在 showSelection 表单中使用此代码接收了 showIDnumOfSeasons:

this.showID = Convert.ToInt32(dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value);
this.numOfSeasons = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString();
this.Close();

现在,在 WPF 版本中我尝试同样的事情:

using (ShowSelection showSelection = new ShowSelection(showListBox.SelectedItem.ToString()))
{

}

但是在 using( ) 中我得到这个错误:ShowSelection:using 语句中使用的类型必须可隐式转换为“System.IDisposable”

我不太确定从这里开始该做什么。我可以解决此问题并仍然以相同的方式进行处理,还是我应该以不同的方式执行此操作? ShowSelection 窗口只是一个带有单个按钮的数据网格。

最佳答案

WPF 组件不使用 Win32 句柄(Window 使用,但它是 self 管理的),因此它们不需要是 IDisposable,您也不需要Dispose 它们或在 using block 中使用它们。

一旦不再有对您的 Window 的引用,它将被标记为由 GC 收集,与其他纯 NET 组件一样。

如果你想在 using block 中使用它,你可以在你的窗口上手动实现 IDisposable ,但这确实不是必需的。

如果您想手动删除资源(并在 using block 中继续使用它),那么最简单的方法就是:

public class ShowSelection : Window, IDisposable
{
public void Dispose()
{
/* here you'd remove any references you don't need */
}
}

但除非有必要,否则我建议不要这样做

关于c# - WPF 使用语句打开另一个窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723332/

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