【发布时间】:2015-10-04 08:42:21
【问题描述】:
我对此感到有些不知所措。
我有一个单独的计时器线程,每秒滴答一次。如果值达到
...
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 线程吗?
-
我在与主视图模型相同的线程中的其他地方访问 toastpopup...但是从视图模型中我启动了一个单独的线程,每秒滴答作响。这会修改一个值,如果该值达到 0,则触发上述 sn-p 代码运行。
-
我不熟悉吐司,但它听起来像是 UI 的东西。你确定你可以在不调用主线程的情况下从后台线程使用它吗?
-
检查this ans.
-
既然我们在谈论 Toast 通知,我假设您使用的不是 WPF,而是 WinRT?我建议您修改标签以反映这一点,搜索此答案的人可能会被当前的 WPF 标签误导。
标签: c# wpf multithreading toast