首页 > 解决方案 > Winforms,仅使用断点控制

问题描述

我为我的 Winforms 应用程序创建了一个自定义 Toast 通知,每当返回自定义结果时,我使用 ShowMessage 扩展来显示通知。

在我的登录屏幕上,我有一个解锁应用程序按钮,只要密码不正确,它就会显示烤面包机消息。

当我在 result.ShowMessage() 之前放置一个断点时;出现通知。但是当我删除断点时,它不再出现。我不更改任何调试值。

我该如何解决这个问题?我确实尝试实现一个 thread.sleep 但它没有改变任何东西,只有当我插入断点并继续它时才会出现通知。

值得注意的是,通知在应用程序的其他任何地方都可以正常工作。

解锁应用程序代码:

private void UnlockApplication()
    {
        var result = new Business.Server.User().Get(_loginModel.UserName, _loginModel.Password.Encrypt());
        if (result.IsSuccessful)
        {
            // Perform log in process
        }
        else
        {
            result.ShowMessage(); //Only works when I put breakpoint here 
        }
    }

ShowMessage 扩展代码

public static void ShowMessage<T>(this Models.Result<T> result) where T : class
    {
      Helpers.ToasterNotificationHelper.ShowNotification(result.ResultTypeKey.ToDescription(), result.Message, result.ResultImage(), result.ResultColor(), result.ResultTypeKey == Enums.ResultTypeEnum.Warning ? 5000 : 2500);  
    }

public static void ShowNotification(string header, string message, Image icon, Color backgroundColor, int durationInMilliseconds = 1000)
        {
            if (Application.OpenForms[0] is MyApplication)
            {
                var toasterNotification = new ToasterNotificationControl(header, message, icon, backgroundColor);
                (Application.OpenForms[0] as MyApplication).toastNotificationCollectionControl1.AddNotification(toasterNotification, durationInMilliseconds);
            }
        }

我的 Toast 通知控件是添加到主应用程序窗体的 DevExpress 弹出面板控件

标签: c#winformsdevexpress

解决方案


您的“Get(_loginModel.UserName ...”似乎是异步的。尝试执行下一步以使呼叫可等待:

private async System.Threading.Tasks.Task UnlockApplicationAsync()
{
    var result = await new Business.Server.User().Get(_loginModel.UserName, _loginModel.Password.Encrypt());
...

推荐阅读