欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#?Winform消息通知之系統(tǒng)本地通知local?toast?notification

 更新時(shí)間:2022年08月23日 10:25:39   作者:代碼迷途  
這篇文章主要為大家介紹了C#?Winform消息通知之系統(tǒng)本地通知local?toast?notification使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

C#應(yīng)用通過 Microsoft.Toolkit.Uwp.Notifications NuGet包可以很方便的發(fā)送本地通知(Windows 10或Windows 11 的 Toast 通知,之前系統(tǒng)版本未提供此類通知),適用于所有類型的應(yīng)用(WPF、UWP、WinForms、控制臺(tái)【實(shí)際使用各自有著不同限制】)。

后面會(huì)介紹使用任務(wù)托盤顯示系統(tǒng)通知,從而不用使用Nuget包。

toast 通知的結(jié)構(gòu)

Toast 內(nèi)容的核心組件有

  • launch:定義當(dāng)用戶單擊你的 Toast 時(shí)將傳回應(yīng)用的參數(shù),允許深層鏈接到 Toast 所顯示的正確內(nèi)容。
  • visual:toast 的可視部分,包括帶有文本和圖像的通用綁定。
  • actions:toast 的交互部分,包括輸入和操作。
  • audio:控制向用戶顯示 Toast 時(shí)播放的音頻。

Toast 內(nèi)容的可視化表示形式:

Toast 內(nèi)容介紹對(duì)toast各種應(yīng)用場景進(jìn)行了介紹,包括文本、文本行數(shù)、圖片、徽章、時(shí)間戳、進(jìn)度條、按鈕、輸入、音頻等。

發(fā)送本地toast通知的操作步驟

新建項(xiàng)目NotificationLocalToast。

安裝NuGet包Microsoft.Toolkit.Uwp.Notifications

推薦 7.0 及以上版本。

如果.NET Framework的桌面應(yīng)用仍使用 packages.config 管理包,需要將其遷移到PackageReference,否則不會(huì)正確引用Windows SDK。

遷移方法是:在項(xiàng)目中,右鍵單擊“引用”,然后單擊“將 packages.config 遷移到 PackageReference”。需要Visual Studio 2017 15.7 及更高版本才支持。

具體參見從 packages.config 遷移到 PackageReference

注:遷移到PackageReference后,需要重啟VS打開項(xiàng)目,否則無法正確的using引用到包庫。

通知的發(fā)送(文本通知)

new ToastContentBuilder()
    .AddText("CodeMissing發(fā)來一條消息") // 標(biāo)題文本
    .AddText("請(qǐng)檢查消息內(nèi)容,并及時(shí)處理")
    .Show(); // 7.0以上才提供Show方法

點(diǎn)擊運(yùn)行并發(fā)送消息,將在屏幕右下角看到toast通知

多次發(fā)送消息,會(huì)依照順序各自依次顯示(等待上一個(gè)進(jìn)入操作中心或被關(guān)閉)。

處理點(diǎn)擊通知的操作

當(dāng)用戶點(diǎn)擊通知后,則會(huì)在后臺(tái)線程調(diào)用ToastNotificationManagerCompat.OnActivated事件,在程序的該事件中處理交互操作。

如果應(yīng)用程序關(guān)閉,將會(huì)啟動(dòng)exe應(yīng)用(并且 ToastNotificationManagerCompat.WasCurrentProcessToastActivated()返回true,表示重新啟動(dòng)了進(jìn)程),然后再在后臺(tái)線程上調(diào)用 ToastNotificationManagerCompat.OnActivated 事件。

在主窗體的構(gòu)造函數(shù)中處理該事件(如果不需要執(zhí)行UI線程的操作,直接在Program.cs的Main函數(shù)入口處添加此監(jiān)聽事件即可)

public MainForm()
{
    InitializeComponent();
    // 監(jiān)聽通知激活(點(diǎn)擊)
    ToastNotificationManagerCompat.OnActivated += toastArgs =>
    {
        // 通知參數(shù)
        ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
        // 獲取任何用戶輸入
        ValueSet userInput = toastArgs.UserInput;
        BeginInvoke(new Action( delegate
        {
            // TODO: UI線程的操作
            MessageBox.Show("Toast被激活(點(diǎn)擊),參數(shù)是: " + toastArgs.Argument);
        }));
    };
}

當(dāng)點(diǎn)擊通知后,會(huì)顯示對(duì)話框。

WPF中的(在入口程序中的)異步UI調(diào)用要通過Application.Current.Dispatcher.Invoke,它是位于System.Windows下的Application。需要添加引用PresentationFramework

// Need to dispatch to UI thread if performing UI operations
Application.Current.Dispatcher.Invoke(delegate
{
    // TODO: Show the corresponding content
    MessageBox.Show("Toast activated. Args: " + toastArgs.Argument);
});

通知的卸載

如果應(yīng)用有卸載程序,應(yīng)該在卸載過程中調(diào)用ToastNotificationManagerCompat.Uninstall();。

如果應(yīng)用是不安裝的“可移植應(yīng)用”,則可根據(jù)需要在退出時(shí)調(diào)用(除非想要在退出后仍然保留通知)。

ToastNotificationManagerCompat.Uninstall()在執(zhí)行后,會(huì)將通知面板中相關(guān)的信息清理掉。

卸載方法將清理任何計(jì)劃通知和當(dāng)前通知,刪除任何關(guān)聯(lián)的注冊(cè)表值,并刪除庫創(chuàng)建的任何關(guān)聯(lián)的臨時(shí)文件。

設(shè)置通知的過期時(shí)間

忽略的toast通知會(huì)轉(zhuǎn)到操作中心(通知中心),后續(xù)仍可以查看。

但是,通常消息都有一定的期限,過期后則不應(yīng)該繼續(xù)顯示或保留,本地 toast 通知的默認(rèn)和最長過期時(shí)間為 3 天。

下面設(shè)置過期時(shí)間為2天:

new ToastContentBuilder()
    .Show(toast =>
    {
        toast.ExpirationTime = DateTime.Now.AddDays(2);
    });

.NET應(yīng)用使用Toast Notifications(.NET5+)

.NET中如果使用Microsoft.Toolkit.Uwp.Notifications,必須指定Windows TFM,且要指定window版本,至少為net6.0-windows10.0.17763.0或更高。否則,將報(bào)錯(cuò)找不到Show()方法。

  • 指定Windows TFM

右鍵項(xiàng)目,編輯項(xiàng)目文件,將TargetFramework指定為如下:

<TargetFramework>net6.0-windows10.0.17763.0</TargetFramework>

通常,指定TFM后,啟動(dòng)調(diào)試會(huì)報(bào)錯(cuò)沒有xxx的目標(biāo),確保已運(yùn)行還原...等錯(cuò)誤。

解決辦法是:清理項(xiàng)目,并重新生成一次即可。

有時(shí)候還會(huì)報(bào)錯(cuò)net6.0-windows10.0.17763.0.Net框架版本不一致,需要修改為net5.0-windows10.0.17763.0。或者改為net5后生成無錯(cuò)再改回net6;或者直接清理項(xiàng)目并重新生成一次。

添加圖像

使用http圖像

目前僅僅具有Internet功能的UWP/MSIX/sparse應(yīng)用才支持http的圖像【sparse,松散或稀疏應(yīng)用】。

UWP/MSIX開發(fā)在Package.appxmanifest文件中用于指定Internet的能力(默認(rèn)已經(jīng)開啟)

其他應(yīng)用,比如Winform、WPF等必須將圖像下載到本地,通過本地路徑引用。

并且web圖片引用有200KB的限制,具體參見官方文檔介紹。不過有個(gè)不太清楚的地方:app's package是什么?又如何從其中獲取圖片?

Images can be used from the app's package, the app's local storage, or from the web. As of the Fall Creators Update, web images can be up to 3 MB on normal connections and 1 MB on metered connections. On devices not yet running the Fall Creators Update, web images must be no larger than 200 KB.

嘗試通過資源pack的方式獲取圖片,未成功,比如WPF圖片中可以使用的"pack://application:,,,/Resources/CSharp.png"。

內(nèi)聯(lián)圖像和主圖

下載圖片到本地,并添加到項(xiàng)目中,設(shè)置圖片屬性:復(fù)制到輸出目錄“總是”或“較新復(fù)制”、生成操作“無”,確保圖片生成到exe程序路徑。

首先獲取img文件的完整路徑,并創(chuàng)建Uri,通過AddInlineImage、AddHeroImage添加為內(nèi)聯(lián)圖像和主圖。

  • 使用file:///構(gòu)建uri
var imgFileFullPath = Path.GetFullPath("Resources/CSharp.png");
var fileUriString = $"file:///{imgFileFullPath}";
var imgUri = new Uri(fileUriString);
new ToastContentBuilder()
    .AddArgument("action", "viewConversation") // 添加相關(guān)參數(shù)
    .AddArgument("conversationId", 9813)
    .AddText("CodeMissing發(fā)來一張圖片") // 標(biāo)題文本
    .AddText("這是C#的圖片")
    .AddInlineImage(imgUri) // 內(nèi)聯(lián)
    .AddHeroImage(imgUri) // 主圖
    .Show();

注意本地文件的Uri訪問協(xié)議:"file:///FileFullPath"

  • 直接使用文件路徑創(chuàng)建Uri

new Uri(localImgPath)也可以創(chuàng)建uri。

var imgFileFullPath = Path.GetFullPath("Resources/CSharp.png");
new ToastContentBuilder()
    .AddText("這是C#的圖片")
    .AddAppLogoOverride(new Uri(imgFileFullPath), ToastGenericAppLogoCrop.Circle)
    .Show();

徽標(biāo)和剪裁(圓形圖片)

new ToastContentBuilder()
    // ....
    .AddAppLogoOverride(imgUri, ToastGenericAppLogoCrop.Circle)
    .Show();

UWP使用http圖片

new ToastContentBuilder()
    .AddArgument("action", "viewConversation") // 添加相關(guān)參數(shù)
    .AddArgument("conversationId", 9813)
    .AddText("CodeMissing發(fā)來一張圖片") // 標(biāo)題文本
    .AddText("這是C#的圖片")
    .AddInlineImage(new Uri("https://www.vippng.com/png/detail/398-3984434_c-programming-png.png"))
    .AddAppLogoOverride(new Uri("https://www.vippng.com/png/detail/398-3984434_c-programming-png.png"), ToastGenericAppLogoCrop.Circle)
    .Show();

圖片來源于網(wǎng)絡(luò)

替換或刪除指定通知

替換或移除toast通知需要使用Tag屬性(以及Group屬性),兩者構(gòu)成toast的主鍵。

為 toast 設(shè)置主鍵

new ToastContentBuilder()
    .AddText("我是含有Tag和Group的消息")
    .Show(toast =>
    {
        toast.Tag = "codemissing101";
        toast.Group = "codemissing";
    });

根據(jù)Tag和Group刪除或替換toast

通過使用相同的Tag和Group再次發(fā)送消息,即可以實(shí)現(xiàn)替換。

new ToastContentBuilder()
    .AddText("我是替換的消息")
    .Show(toast =>
    {
        toast.Tag = "codemissing101";
        toast.Group = "codemissing";
    });

History.Remove 或者 RemoveGroup 實(shí)現(xiàn)移除

ToastNotificationManagerCompat.History.Remove("codemissing101", "codemissing");

如果只有Tag則只指定Tag,如果Tag和Group都存在,則兩者都需要指定才能匹配。

清除通知

ToastNotificationManagerCompat.History.Clear();

參考

從 C# 應(yīng)用發(fā)送本地 toast 通知

以上就是C# Winform消息通知之系統(tǒng)本地通知local toast notification的詳細(xì)內(nèi)容,更多關(guān)于C# Winform系統(tǒng)本地消息通知的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實(shí)現(xiàn)ini文件讀寫操作

    C#實(shí)現(xiàn)ini文件讀寫操作

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)ini文件的讀寫操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C# WebApi CORS跨域問題解決方案

    C# WebApi CORS跨域問題解決方案

    本篇文章主要介紹了C# WebApi CORS跨域問題解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • C#生成防偽碼的思路及源碼分享

    C#生成防偽碼的思路及源碼分享

    生成防偽碼其實(shí)挺簡單,但是如果要考慮效率和不重復(fù)的話,就需要稍微動(dòng)動(dòng)腦子了,下面我來說說我的思路及源碼
    2014-06-06
  • C#引用類型轉(zhuǎn)換的常見方式總結(jié)

    C#引用類型轉(zhuǎn)換的常見方式總結(jié)

    這篇文章主要介紹了C#引用類型轉(zhuǎn)換的常見方式,包括子類轉(zhuǎn)換成父類,父類轉(zhuǎn)換成子類,以及不是子父級(jí)關(guān)系類之間的轉(zhuǎn)換,需要的朋友可以參考下
    2014-09-09
  • unity3d實(shí)現(xiàn)七天簽到功能

    unity3d實(shí)現(xiàn)七天簽到功能

    這篇文章主要為大家詳細(xì)介紹了unity3d實(shí)現(xiàn)七天簽到功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 對(duì)C# 多態(tài)的理解

    對(duì)C# 多態(tài)的理解

    這篇文章主要介紹了對(duì)C# 多態(tài)的理解,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C#處理datagridview虛擬模式的方法

    C#處理datagridview虛擬模式的方法

    這篇文章主要介紹了C#處理datagridview虛擬模式的方法,實(shí)例分析了C#中datagridview的使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#?線程切換后上下文都去了哪里(.NET高級(jí)調(diào)試分析)

    C#?線程切換后上下文都去了哪里(.NET高級(jí)調(diào)試分析)

    總會(huì)有一些朋友問一個(gè)問題,在 Windows 中線程做了上下文切換,請(qǐng)問被切的線程他的寄存器上下文都去了哪里?這個(gè)問題其實(shí)比較底層,如果對(duì)操作系統(tǒng)沒有個(gè)體系層面的理解以及做過源碼分析,其實(shí)很難說明白,這篇我們就從.NET高級(jí)調(diào)試的角度分析,需要的朋友可以參考下
    2023-12-12
  • 基于WPF實(shí)現(xiàn)面包屑控件的示例代碼

    基于WPF實(shí)現(xiàn)面包屑控件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)簡單的面包屑控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-05-05
  • C#制作網(wǎng)站掛機(jī)程序的實(shí)現(xiàn)示例

    C#制作網(wǎng)站掛機(jī)程序的實(shí)現(xiàn)示例

    本文主要介紹了C#制作網(wǎng)站掛機(jī)程序,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論