我对此感到有点不知所措。
我有一个单独的计时器线程,每秒滴答一次。如果某个值<= 0,则运行这段代码:
...
EnemyHP = EnemyMaxHP;
//Toast t = new Toast("You died!", "Oh no, you died! the " + Enemies[CurrentEnemy].Name + " killed you, and you lost " + lost + " GP!", NotificationType.Warning);
Log.Info("Player Died!!! Enemy responsible: " + Enemies[CurrentEnemy].Name + ". GP Lost: " + lost + ".");
如果我按原样运行,则 Log.Info 行将运行,并且日志行将显示在文件中。但是,如果我取消注释中间行,它就会开始运行该行,但似乎很快就会停止,然后永远不会运行日志文件行。这是 Toast 中调用的 CTOR:
public Toast(string Title, string Description, NotificationType Type = NotificationType.Information)
{
toast = new ToastPopUp(Title, Description, "", Type);
toast.Background = new SolidColorBrush(Colors.AliceBlue);
toast.BorderBrush = new SolidColorBrush(Colors.Black);
toast.FontColor = new SolidColorBrush(Colors.Black);
//toast.HyperlinkClicked += this.ToastHyperlinkClicked;
//toast.ClosedByUser += this.ToastClosedByUser;
toast.Show();
}
ToastPopUp 指 https://toastspopuphelpballoon.codeplex.com/ - 我正在用这个。运行此代码时,Toast 弹出窗口不会显示,但在代码中的其他位置使用相同的代码时运行良好。
最佳答案
我怀疑 Toast 只能从 UI 线程创建,因此构造函数会抛出异常。通常,WPF 中的所有 UI 操作只能从 UI 线程完成。
尝试invoke the Toast constructor on the UI thread 。这假设您的应用程序是 WPF 应用程序(您的问题并不能 100% 清楚)。
您还应该学习如何handle exceptions in non-UI threads in WPF ,这样你就可以真正明白为什么你的代码会被破坏。
关于c# - 后台线程的 Toast 通知失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428183/