小编eol*_*dre的帖子

在显示缓慢加载的UserControl时保持WPF UI响应

我们有一个使用MVVM模式编写的WPF应用程序.在应用程序中是TabControl,每个选项卡中包含不同的UserControl.在某些情况下,切换到包含选项卡时,选项卡上的某个UserControl可能会占用大量时间.

这不是因为ViewModel中存在任何性能瓶颈.但相反,是由于用户控件绑定到ViewModel并创建其中包含的各种UI元素并初始化它们所花费的大量时间.

当用户单击此用户控件的选项卡时,UI将完全无响应,直到控件完成加载.事实上,在所有内容都加载之前,您甚至都看不到"活动标签".

在等待UI元素完成加载时,我可以使用哪些策略来显示带有某种"请等待,加载..."消息的"微调器"?

更新示例代码:

下面演示了我试图解决的问题类型.当您单击"慢速选项卡"时.在慢速选项卡中的所有项目都已呈现之前,UI将无响应.

在下面,TestVM是慢选项卡的视图模型.它有大量的儿童对象.每个都使用自己的数据模板创建.

如何在慢速标签完成加载时显示"加载"消息?

public class MainVM
{
    private TestVM _testVM = new TestVM();
    public TestVM TestVM
    {
        get { return _testVM; }
    }
}

/// <summary>
/// TestVM is the ViewModel for the 'slow tab'. It contains a large collection of children objects that each will use a datatemplate to render. 
/// </summary>
public class TestVM
{
    private IEnumerable<ChildBase> _children;

    public TestVM()
    {
        List<ChildBase> list = new List<ChildBase>();
        for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

wpf mvvm

7
推荐指数
1
解决办法
4545
查看次数

通过扩展方法将linq中的逻辑封装到sql查询中

给出了LINQ to SQL .dbml文件中的两个类,具有以下特性.

Customer
    CustomerId
    FirstName
    LastName
    AddressId

Address
    AddressId
    Street
    City
    State
    Zip
Run Code Online (Sandbox Code Playgroud)

您可以构造一个LINQ查询,如下所示.

using(var db = new MyDataContext())
{
    results = db.Customers
        .Where(c => c.LastName.BeginsWith("o"))
        .Select(c => new
            {
                c.CustomerId,
                MailingAddress = c.FirstName + " " 
                    + c.LastName 
                    + Environment.NewLine 
                    + c.Address.Street 
                    + Environment.NewLine 
                    + c.Address.City + ", " 
                    + c.Address.State + " " 
                    + c.Address.Zip
            }).ToList();

}
Run Code Online (Sandbox Code Playgroud)

现在让我们说你想要解释邮件地址的逻辑.您可以实现的两种方法是向Customer类添加新属性,或创建扩展方法.

public static class CustomerExtensions
{
    public static string GetMailingAddress(this Customer cust)
    {
        return cust.FirstName + " "
                    + …
Run Code Online (Sandbox Code Playgroud)

linq extension-methods encapsulation linq-to-sql

5
推荐指数
1
解决办法
292
查看次数

使用 StackExchange.Redis 处理暂时性网络错误

寻找有关使用 StackExchange.Redis 客户端时处理临时网络问题的指南。

为了澄清起见,我并不是说最初使用 ConnectionMultiplexer.Connect() 连接到 Redis 服务器。我指的是如何处理在操作过程中由于任何原因中断的连接。(我们可以假设命令是幂等的,StringSet、StringGet)

我问这个问题是因为我们正在从 ServiceStack 迁移到 StackExchange 客户端。在我们正在替换的使用 ServiceStack 的代码中,捕获了异常,并且在短暂的 thread.sleep() 后将再次尝试操作。这种情况在我们的生产环境中经常发生,并且在大多数情况下重试都会起作用。

通常它是一个 System.Net.SocketException,带有消息“已建立的连接被主机中的软件中止”或“现有连接被远程主机强制关闭”

如果抛出 System.Net.SocketException,StackExchange.Redis 是否会自动重试,直到达到syncTimeout 时间为止?

如果 SE.Redis 没有自动重试,在我们的代码中,在初始操作失败和重试之间是否应该执行任何建议的步骤?例如:

  • 等待很短的时间?
  • 重新创建多路复用器?(我猜不会)
  • 调用Close() 和Configure()?

感谢您的任何指导。

c# redis stackexchange.redis

5
推荐指数
1
解决办法
3557
查看次数

来自route参数的ASP.Net Core 2 Controller依赖注入

我在ASP.Net Core 2应用程序中使用属性库路由,并尝试根据路由将参数注入Controller.

当我使用该示例时,我收到一条消息的异常:"尝试激活(我的控制器类型)时无法解析类型'System.String'的服务"

[Route("api/agencies/{agencyId}/clients")]
public class ClientDataController : Controller
{
    public ClientDataController([FromRoute] string agencyId)
    {

    }

    [HttpGet]
    public void SomeAction()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

您是否无法在控制器构造函数中使用FromRoute属性?我有别的东西显然是错的吗?

c# asp.net-mvc routing asp.net-core-mvc

5
推荐指数
1
解决办法
732
查看次数

在Windows GDI中创建和使用字体/避免内存泄漏

我试图在用C编写并在Windows CE 6.0上运行的应用程序中找到内存泄漏的底部.我怀疑这个问题可能与窗口的paint事件的处理有关.在伪代码中它看起来像这样.

LRESULT CALLBACK HandlePaint(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) 
{
    HDC hdc;
    PAINTSTRUCT ps;
    hdc = BeginPaint (hWnd, &ps);

    HFONT logfont;
    FONTINFO font1, font2;

    memset(&logfont, 0, sizeof(LOGFONT));
    //set font options for font1.
    font1 = CreateFontIndirect(&logfont);

    memset(&logfont, 0, sizeof(LOGFONT));
    //set font options for font2.
    font2 = CreateFontIndirect(&logfont);

    for(int i = 0; i <= SOME_NUMBER; i++)
    {
        DrawStuff(hdc, font1);
        DrawStuff(hdc, font2);
    }   

    EndPaint (hWnd, &ps);

}

INT DrawStuff(HDC hdc, HFONT font)
{
    HPEN pen = CreatePen(PS_SOLID, borderWidth, bordercolor); …
Run Code Online (Sandbox Code Playgroud)

c gdi windows-ce

2
推荐指数
1
解决办法
1805
查看次数