【问题标题】:Winforms, control only working with breakpointWinforms,仅使用断点控制
【发布时间】:2020-08-28 08:04:15
【问题描述】:

我为我的 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 Notification 控件是添加到主应用程序表单的 DevExpress 弹出面板控件

【问题讨论】:

  • 这个方法“Business.Server.User().Get....”是异步的吗?
  • 看来你需要await要完成的任务
  • 不,不是,我试过让方法异步,但没有用
  • @TuxedoMan 何时调用“UnlockApplication()”?
  • 点击解锁按钮

标签: c# winforms devexpress


【解决方案1】:

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

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

【讨论】:

  • 我试过这样做,不幸的是,它仍然没有显示。它仍然只显示断点
  • @TuxedoMan "ShowMessage()" 做什么?
  • Show Message 将通知控件添加到父窗体,执行滑出动画,保持可见 5 秒,然后将其从父窗体中移除。
  • @TuxedoMan 我不喜欢“如果 (Application.OpenForms[0] is MyApplication) ...”。你的代码是否总是进入这个“如果”?
  • 是的,这是一个多余的检查,但它是我们为“原样”实现所遵循的标准,以防止任何意外操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多