WPF使用语句打开另一个表单

时间:2016-01-11 13:59:36

标签: c# wpf winforms

我在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: type used in a using statement must be implicitly convertible to 'System.IDisposable'

我不确定从这里开始做什么。我可以解决这个问题并且仍然以相同的方式解决这个问题,或者我应该采用不同的方式做到这一点吗? ShowSelection窗口只是一个带有单个按钮的数据网格。

2 个答案:

答案 0 :(得分:6)

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

一旦没有对Window的引用,它就会被GC标记为收集,与其他纯.NET组件一样。

如果您想在using块中使用它,可以手动在窗口上实现IDisposable,但确实不需要。

如果您想手动删除资源(并在using块中继续使用),那么您可以做的最简单:

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

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

答案 1 :(得分:1)

它只是说ShowSelection类不是从IDisposable派生的 所以在没有使用的情况下使用它:

ShowSelection showSelection = new ShowSelection(showListBox.SelectedItem.ToString());

并访问您需要的属性: showSelection。#####