小编use*_*768的帖子

WPF如何处理绑定到null对象的属性?

我有一个使用itemTemplate的listBox,其中包含以下行:

<Image Source="{Binding MyProperty.PossiblyNullObject.UrlProperty}"/> 
Run Code Online (Sandbox Code Playgroud)

绑定到此listBox是一个模型视图集合,它在单独的线程上加载集合中项目的组件.当组合引擎首次呈现xaml代码时,可能不会将'PossiblyNullObject'设置为值.

WPF如何处理这个?它是否使用默认值(没有图像源,因此没有图像)并继续?它等了吗?它是否会自动检测值何时初始化并使用新源重新呈现?它是如何以与我以编程方式调用'MyProperty.PossiblyNullObject.UrlProperty'相同的方式抛出对象空异常?当我尝试调用它时,如何在我自己的代码中重现此功能?

谢谢你的任何建议.我对WPF很尴尬,我正试图解决一个问题.图像加载是一个性能问题所以我找到了一个解决方案来加载,解码,然后冻结后台线程上的图像源,这样它就不会锁定UI.不幸的是,当我尝试使用调用相同属性的解决方案替换图像源绑定时,我遇到了这个空异常问题.WPF以某种方式处理可能的null对象,我想以同样的方式来保持清洁.

wpf null xaml multithreading properties

15
推荐指数
1
解决办法
1万
查看次数

ThreadAbortException最终可以跳过吗?

我读过的所有内容声称线程中止将在从ThreadAbortException结束之前执行finally块.我想确认这一点,以便我可以计划如何处理可以无限期挂起的某些第三方代码.但是下面的测试让我感到困惑:

public void runTest(DateTime deadline)
{
    testThread = new Thread(() => 
    {
        try 
        {
            Console.WriteLine("test thread started at " + DateTime.Now.ToShortTimeString());
            while (true) { }
        }
        finally
        {
            Console.WriteLine("test thread entered FINALLY at " + DateTime.Now.ToShortTimeString());
            while (true) { }
        }
    });
    testThread.Start();
    while (testThread.IsAlive && deadline.Subtract(DateTime.Now).TotalSeconds > 0)
    {
        Console.WriteLine("main thread while loop " + DateTime.Now.ToShortTimeString());
        Thread.Sleep(10000);
    }
    if (testThread.IsAlive)
        testThread.Abort();
    Console.WriteLine("main thread after abort call " + DateTime.Now.ToShortTimeString());
}
Run Code Online (Sandbox Code Playgroud)

我在运行时发现的是控制台从未提到进入finally块.应用程序在.abort调用之后继续,好像根本没有finally块.难道我做错了什么?在到达最终写入控制台之前,不应该控制传递给finally块,还是执行顺序仍然是最终在单独的线程中的事实的函数?

c# multithreading finally abort

5
推荐指数
2
解决办法
4273
查看次数

标签 统计

multithreading ×2

abort ×1

c# ×1

finally ×1

null ×1

properties ×1

wpf ×1

xaml ×1