使用new()释放静态对象?

时间:2013-04-12 12:13:20

标签: c# wpf xaml data-binding static

我在.net 4.5中有一个WPF应用程序 在这个应用程序中,我创建了一个名为“Client”的类。

在我的App.xaml.cs上,我声明并实例化一个Client对象:

    public partial class App : Application
    {

        public static Client obj_myClient;

        private void Application_Startup_1(object sender, StartupEventArgs e)
        {

            obj_myClient = new Client();

        }
    }

启动后,我将所有客户端加载到DataGrid中,当我进入客户端行(在DataGrid上)时,客户端属性将加载到App.obj_myClient中(带有绑定)。

我可以轻松地修改我的客户端在DataBAse中的保存。

我的问题:当我想创建一个新客户端时,我需要“刷新”我的App.objMyClient对象,所以我使用了:

App.obj_myClient = new Client();

这段代码编译正确,没有崩溃,但它似乎在我的绑定中生成错误数据并且总是出现奇怪的错误(比如非火事件改变等等)。

我认为这与:

有关
App.obj_myClient = new Client(); 

因为如果删除这一行,代码会更好。

请问您对此案有何建议?

非常感谢:)

致以最诚挚的问候,

Nixeus

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作以避免静态变量。但是很难说它是否会解决你的问题,因为我们不知道它在做什么。

public class App : Application
{
    public Client obj_myClient;
    private void Application_Startup_1(object sender, StartupEventArgs e)
    {
        obj_myClient = new Client();
    }
}

用法

private void SomeMethod()
{
    var someValue = ((App)Application.Current).obj_myClient.WhatEverMethod();
}

答案 1 :(得分:1)

您不需要将客户端对象设置为静态。将其转换为财产。

事件的非激发是,当您创建新的Client对象时,旧对象的订阅将丢失,您必须重新创建它们。