WPF從初學者到專家:實戰項目經驗分享與總結

在這里插入圖片描述
在這里插入圖片描述

WPF從初學者到專家:實戰項目經驗分享與總結

  • 一、前言
  • 二、WPF 基礎概念與入門
    • 2.1 什么是 WPF
    • 2.2 XAML 基礎
    • 2.3 數據綁定基礎
  • 三、第一個 WPF 項目:簡單的待辦事項列表
    • 3.1 項目需求分析
    • 3.2 項目搭建與界面設計
    • 3.3 業務邏輯實現
  • 四、中級項目:音樂播放器應用
    • 4.1 項目需求分析
    • 4.2 界面設計與布局
    • 4.3 多媒體功能實現
  • 五、高級項目:企業級辦公自動化平臺(回顧與進階)
    • 5.1 項目回顧與優化
    • 5.2 引入 MVVM 模式
    • 5.3 性能優化與安全性增強
  • 六、項目中常見問題與解決方法
    • 6.1 內存泄漏問題
    • 6.2 界面卡頓問題
    • 6.3 數據綁定錯誤
  • 七、總結與展望
  • 結束語
  • 優質源碼分享

WPF從初學者到專家:實戰項目經驗分享與總結 ,Windows Presentation Foundation(WPF)作為微軟推出的新一代圖形系統,為開發者提供了強大的用戶界面開發工具。對于想要深入學習 WPF 的開發者來說,從理論知識到實際項目的跨越是必經之路。在這個過程中,積累的實戰經驗不僅能幫助我們更好地掌握 WPF 技術,還能提升解決實際問題的能力。本文將分享從 WPF 初學者逐步成長為專家的實戰項目經驗,涵蓋基礎知識、項目實踐、問題解決以及技術進階等方面。

一、前言

????在數字浪潮洶涌澎湃的時代,程序開發宛如一座神秘而宏偉的魔法城堡,矗立在科技的浩瀚星空中。代碼的字符,似那閃爍的星辰,按照特定的軌跡與節奏,組合、交織、碰撞,即將開啟一場奇妙且充滿無限可能的創造之旅。當空白的文檔界面如同深邃的宇宙等待探索,程序員們則化身無畏的星辰開拓者,指尖在鍵盤上輕舞,準備用智慧與邏輯編織出足以改變世界運行規則的程序畫卷,在 0 和 1 的二進制世界里,鐫刻下屬于人類創新與突破的不朽印記。

????在當今數字化時代,桌面應用程序的用戶界面(UI)設計至關重要,它直接影響著用戶體驗與產品的競爭力。而 WPF(Windows Presentation Foundation)作為微軟推出的一款強大的 UI 框架,其布局系統更是構建精美界面的核心要素。WPF 布局系統為開發者提供了豐富多樣的布局方式,能夠輕松應對各種復雜的界面設計需求,無論是簡潔明了的工具軟件,還是功能繁雜的企業級應用,都能借助其打造出令人驚艷的視覺效果與流暢的交互體驗。

????WPF從入門到精通專欄,旨在為讀者呈現一條從對 WPF(Windows Presentation Foundation)技術懵懂無知到精通掌握的學習路徑。首先從基礎入手,介紹 WPF 的核心概念,涵蓋其獨特的架構特點、開發環境搭建流程,詳細解讀布局系統、常用控件以及事件機制等基礎知識,幫助初學者搭建起對 WPF 整體的初步認知框架。隨著學習的深入,進階部分聚焦于數據綁定、樣式模板、動畫特效等關鍵知識點,進一步拓展 WPF 開發的能力邊界,使開發者能夠打造出更為個性化、交互性強的桌面應用界面。高級階段則涉及自定義控件開發、MVVM 設計模式應用、多線程編程等深層次內容,助力開發者應對復雜的業務需求,構建大型且可維護的應用架構。同時,通過實戰項目案例解析,展示如何將所學知識綜合運用到實際開發中,從需求分析到功能實現再到優化測試,全方位積累實踐經驗。此外,還探討了性能優化、與其他技術集成以及安全機制等拓展性話題,讓讀者對 WPF 技術在不同維度有更深入理解,最終實現對 WPF 技術的精通掌握,具備獨立開發高質量桌面應用的能力。

🛕 點擊進入WPF從入門到精通專欄

在這里插入圖片描述

二、WPF 基礎概念與入門

2.1 什么是 WPF

????WPF 是基于.NET Framework 的圖形系統,它融合了矢量圖形、豐富的文本支持、動畫和多媒體等特性,旨在為 Windows 應用程序提供一致的、靈活的用戶界面開發體驗。與傳統的 Windows Forms 不同,WPF 采用 XAML(可擴展應用程序標記語言)來定義界面,將界面設計與代碼邏輯分離,這使得設計師和開發者可以更高效地協作。

2.2 XAML 基礎

????XAML 是一種基于 XML 的標記語言,用于描述 WPF 應用程序的用戶界面。它允許通過聲明性語法創建 UI 元素,例如按鈕、文本框、窗口等。下面是一個簡單的 XAML 示例,展示如何創建一個包含按鈕的窗口:

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="My First WPF Window" Height="350" Width="525"><Grid><Button Content="Click Me!" HorizontalAlignment="Center" VerticalAlignment="Center"/></Grid>
</Window>

????在這個示例中,<Window>元素定義了一個窗口,<Grid>是一個布局容器,<Button>則是一個按鈕控件。通過設置屬性,如Content、HorizontalAlignment和VerticalAlignment,可以定義按鈕的顯示內容和位置。

2.3 數據綁定基礎

????數據綁定是 WPF 的核心特性之一,它允許將 UI 元素與數據源進行綁定,實現數據的雙向同步。例如,將一個文本框的Text屬性綁定到一個數據對象的屬性上,當數據對象的屬性值發生變化時,文本框的內容也會自動更新,反之亦然。

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Data Binding Example" Height="350" Width="525"><Grid><StackPanel><TextBox Text="{Binding Name}" Margin="5"/><TextBlock Text="{Binding Name}" Margin="5"/></StackPanel></Grid>
</Window>public class Person
{private string _name;public string Name{get { return _name; }set{_name = value;// 這里可以添加屬性變更通知的代碼,如使用INotifyPropertyChanged接口}}
}

????在上述代碼中,TextBoxTextBlockText屬性都綁定到了Person類的Name屬性上。雖然這里沒有完整實現屬性變更通知,但展示了數據綁定的基本用法。

三、第一個 WPF 項目:簡單的待辦事項列表

3.1 項目需求分析

????創建一個簡單的待辦事項列表應用程序,用戶可以添加、刪除和標記待辦事項。每個待辦事項包含一個任務描述和一個完成狀態。

3.2 項目搭建與界面設計

????首先,在 Visual Studio 中創建一個新的 WPF 項目。然后,在 XAML 中設計界面:

<Window x:Class="TodoListApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Todo List" Height="350" Width="525"><Grid><StackPanel Margin="10"><TextBox x:Name="txtTask" Margin="5"/><Button Content="Add Task" Click="AddTask_Click" Margin="5"/><ListView x:Name="lstTasks" Margin="5"><ListView.View><GridView><GridViewColumn Header="Task" DisplayMemberBinding="{Binding Task}"/><GridViewColumn Header="Completed" DisplayMemberBinding="{Binding Completed}"/></GridView></ListView.View></ListView><Button Content="Delete Selected Task" Click="DeleteTask_Click" Margin="5"/></StackPanel></Grid>
</Window>

????這個界面包含一個文本框用于輸入新任務,一個按鈕用于添加任務,一個列表視圖用于顯示任務列表,以及一個按鈕用于刪除選中的任務。

3.3 業務邏輯實現

????在 C# 代碼中實現添加和刪除任務的功能:

using System.Collections.ObjectModel;
using System.Windows;namespace TodoListApp
{public partial class MainWindow : Window{private ObservableCollection<TodoItem> _todoItems;public MainWindow(){InitializeComponent();_todoItems = new ObservableCollection<TodoItem>();lstTasks.ItemsSource = _todoItems;}private void AddTask_Click(object sender, RoutedEventArgs e){string task = txtTask.Text.Trim();if (!string.IsNullOrEmpty(task)){_todoItems.Add(new TodoItem { Task = task, Completed = false });txtTask.Text = "";}}private void DeleteTask_Click(object sender, RoutedEventArgs e){TodoItem selectedItem = lstTasks.SelectedItem as TodoItem;if (selectedItem!= null){_todoItems.Remove(selectedItem);}}}public class TodoItem{public string Task { get; set; }public bool Completed { get; set; }}
}

????在這個實現中,使用ObservableCollection<TodoItem>來存儲待辦事項列表,這樣當集合中的元素發生變化時,列表視圖會自動更新。

四、中級項目:音樂播放器應用

4.1 項目需求分析

????開發一個功能較為完善的音樂播放器,支持播放、暫停、停止、上一曲、下一曲功能,顯示歌曲列表和當前播放歌曲信息,并且具備簡單的音量控制。

4.2 界面設計與布局

????使用 XAML 設計一個美觀的界面,包含歌曲列表區域、播放控制按鈕區域、歌曲信息顯示區域和音量控制滑塊:

<Window x:Class="MusicPlayerApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Music Player" Height="450" Width="600"><Grid><StackPanel Margin="10"><ListView x:Name="lstSongs" Margin="5"><ListView.View><GridView><GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}"/><GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}"/></GridView></ListView.View></ListView><StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5"><Button Content="Play" Click="Play_Click" Margin="5"/><Button Content="Pause" Click="Pause_Click" Margin="5"/><Button Content="Stop" Click="Stop_Click" Margin="5"/><Button Content="Previous" Click="Previous_Click" Margin="5"/><Button Content="Next" Click="Next_Click" Margin="5"/></StackPanel><TextBlock x:Name="txtSongInfo" Margin="5"/><Slider x:Name="sliderVolume" Minimum="0" Maximum="1" Value="0.5" Margin="5"/></StackPanel></Grid>
</Window>

4.3 多媒體功能實現

????使用MediaElement控件來實現音樂播放功能,結合ObservableCollection來管理歌曲列表:

using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media;namespace MusicPlayerApp
{public partial class MainWindow : Window{private ObservableCollection<Song> _songs;private int _currentSongIndex;private MediaElement mediaElement;public MainWindow(){InitializeComponent();_songs = new ObservableCollection<Song>();_songs.Add(new Song { Title = "Song 1", Artist = "Artist 1", FilePath = "song1.mp3" });_songs.Add(new Song { Title = "Song 2", Artist = "Artist 2", FilePath = "song2.mp3" });lstSongs.ItemsSource = _songs;_currentSongIndex = 0;mediaElement = new MediaElement();mediaElement.LoadedBehavior = MediaState.Manual;mediaElement.MediaEnded += MediaElement_MediaEnded;PlayCurrentSong();}private void PlayCurrentSong(){Song currentSong = _songs[_currentSongIndex];mediaElement.Source = new Uri(currentSong.FilePath, UriKind.Relative);mediaElement.Play();txtSongInfo.Text = $"Now Playing: {currentSong.Title} - {currentSong.Artist}";}private void Play_Click(object sender, RoutedEventArgs e){mediaElement.Play();}private void Pause_Click(object sender, RoutedEventArgs e){mediaElement.Pause();}private void Stop_Click(object sender, RoutedEventArgs e){mediaElement.Stop();}private void Previous_Click(object sender, RoutedEventArgs e){if (_currentSongIndex > 0){_currentSongIndex--;PlayCurrentSong();}}private void Next_Click(object sender, RoutedEventArgs e){if (_currentSongIndex < _songs.Count - 1){_currentSongIndex++;PlayCurrentSong();}}private void MediaElement_MediaEnded(object sender, RoutedEventArgs e){if (_currentSongIndex < _songs.Count - 1){_currentSongIndex++;PlayCurrentSong();}}}public class Song{public string Title { get; set; }public string Artist { get; set; }public string FilePath { get; set; }}
}

????在這個實現中,MediaElement負責音樂的播放、暫停和停止等操作,通過Uri來指定要播放的歌曲文件路徑。

五、高級項目:企業級辦公自動化平臺(回顧與進階)

5.1 項目回顧與優化

????在之前構建的辦公自動化平臺基礎上,進一步優化用戶體驗和功能。例如,在用戶管理模塊中,使用DataGrid的內置編輯功能,允許用戶直接在表格中編輯員工信息,而無需額外的編輯界面。

<DataGrid x:Name="userDataGrid" ItemsSource="{Binding Users}" IsReadOnly="False"><DataGrid.Columns><DataGridTextColumn Header="ID" Binding="{Binding Id}" IsReadOnly="True"/><DataGridTextColumn Header="姓名" Binding="{Binding Name}"/><DataGridTextColumn Header="部門" Binding="{Binding Department}"/><DataGridTextColumn Header="職位" Binding="{Binding Position}"/></DataGrid.Columns>
</DataGrid>

????在代碼中,處理DataGridCellEditEnding事件,保存用戶的編輯:

private void userDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{User user = e.Row.DataContext as User;if (user!= null){userService.UpdateUser(user);}
}

5.2 引入 MVVM 模式

????為了更好地分離界面邏輯和業務邏輯,引入 MVVM(Model - View - ViewModel)模式。以任務管理模塊為例,創建TaskViewModel類:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;namespace OfficeAutomationApp.ViewModels
{public class TaskViewModel : INotifyPropertyChanged{private ObservableCollection<Task> _tasks;public ObservableCollection<Task> Tasks{get { return _tasks; }set{_tasks = value;OnPropertyChanged();}}public TaskViewModel(){_tasks = new ObservableCollection<Task>();// 初始化任務數據}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}
}

????在 XAML 中,通過DataContext將視圖與視圖模型綁定:

<ListView x:Name="taskListView" ItemsSource="{Binding Tasks}"><!-- 列定義省略 -->
</ListView>public partial class TaskManagementWindow : Window
{public TaskManagementWindow(){InitializeComponent();DataContext = new TaskViewModel();}
}

5.3 性能優化與安全性增強

????在性能優化方面,對于大數據量的文件管理模塊,采用分頁加載技術,減少一次性加載的數據量。在數據庫查詢時,使用存儲過程來提高查詢效率。
在安全性方面,對用戶登錄密碼采用更復雜的加密算法,如 BCrypt。同時,在數據傳輸過程中,使用 SSL/TLS 協議來確保數據的安全傳輸。

六、項目中常見問題與解決方法

6.1 內存泄漏問題

????在 WPF 應用中,不當的事件綁定和資源使用可能導致內存泄漏。例如,在事件處理程序中沒有正確解除事件綁定,當對象被銷毀時,事件處理程序仍然持有對象的引用,導致對象無法被垃圾回收。解決方法是在對象銷毀時,手動解除事件綁定。

public class MyClass : IDisposable
{private SomeObject _someObject;public MyClass(){_someObject = new SomeObject();_someObject.SomeEvent += SomeObject_SomeEvent;}private void SomeObject_SomeEvent(object sender, EventArgs e){// 處理事件}public void Dispose(){_someObject.SomeEvent -= SomeObject_SomeEvent;_someObject = null;}
}

6.2 界面卡頓問題

????當界面上有大量動畫或復雜的圖形渲染時,可能會出現卡頓現象。可以通過優化圖形渲染,如使用硬件加速、減少不必要的重繪等方式來解決。例如,將一些靜態圖形元素設置為CacheMode = new BitmapCache(),這樣可以將元素緩存為位圖,減少實時渲染的開銷。

<Rectangle Fill="Red" Width="100" Height="100" CacheMode="BitmapCache"/>

6.3 數據綁定錯誤

????數據綁定過程中可能出現綁定路徑錯誤、數據源屬性變更通知未實現等問題。解決方法是仔細檢查綁定路徑,確保數據源實現了INotifyPropertyChanged接口,以便在屬性值發生變化時通知綁定目標更新。

七、總結與展望

????從 WPF 初學者到專家的成長過程中,通過不斷地實踐項目,我們逐漸掌握了 WPF 的核心概念和技術,如 XAML、數據綁定、布局管理、多媒體處理等。在項目實踐中,我們不僅學會了如何開發功能完善的應用程序,還學會了如何解決各種實際問題,如性能優化、安全性增強等。

????展望未來,隨著 WPF 技術的不斷發展,以及與其他新技術的融合,如.NET Core 的跨平臺支持、人工智能技術的應用等,WPF 開發者將有更多的機會和挑戰。我們可以進一步探索如何將 WPF 應用與云計算、物聯網等領域相結合,開發出更具創新性和實用性的應用程序。同時,持續學習和關注行業動態,不斷提升自己的技術水平,將是保持競爭力的關鍵。

結束語

????????展望未來,WPF 布局系統依然有著廣闊的發展前景。隨著硬件技術的不斷革新,如高分辨率屏幕、折疊屏設備的日益普及,WPF 布局系統有望進一步強化其自適應能力,為用戶帶來更加流暢、一致的體驗。在應對高分辨率屏幕時,能夠更加智能地縮放和布局元素,確保文字清晰可讀、圖像不失真;對于折疊屏設備,可動態調整布局結構,充分利用多屏空間,實現無縫切換。

????????性能優化方面,微軟及廣大開發者社區將持續努力,進一步降低復雜布局的計算開銷,提高布局更新的效率,使得 WPF 應用在處理大規模數據、動態界面時依然能夠保持高效響應。通過改進算法、優化內存管理等手段,讓 WPF 布局系統在性能上更上一層樓。

????????親愛的朋友,無論前路如何漫長與崎嶇,都請懷揣夢想的火種,因為在生活的廣袤星空中,總有一顆屬于你的璀璨星辰在熠熠生輝,靜候你抵達。

???????? 愿你在這紛繁世間,能時常收獲微小而確定的幸福,如春日微風輕拂面龐,所有的疲憊與煩惱都能被溫柔以待,內心永遠充盈著安寧與慰藉。

????????至此,文章已至尾聲,而您的故事仍在續寫,不知您對文中所敘有何獨特見解?期待您在心中與我對話,開啟思想的新交流。


--------------- 業精于勤,荒于嬉 ---------------

請添加圖片描述

--------------- 行成于思,毀于隨 ---------------

優質源碼分享

  • 【百篇源碼模板】html5各行各業官網模板源碼下載

  • 【模板源碼】html實現酷炫美觀的可視化大屏(十種風格示例,附源碼)

  • 【VUE系列】VUE3實現個人網站模板源碼

  • 【HTML源碼】HTML5小游戲源碼

  • 【C#實戰案例】C# Winform貪吃蛇小游戲源碼


在這里插入圖片描述


???? 💞 關注博主 帶你實現暢游前后端

???? 🏰 大屏可視化 帶你體驗酷炫大屏

???? 💯 神秘個人簡介 帶你體驗不一樣得介紹

???? 🎀 酷炫邀請函 帶你體驗高大上得邀請


???? ① 🉑提供云服務部署(有自己的阿里云);
???? ② 🉑提供前端、后端、應用程序、H5、小程序、公眾號等相關業務;
???? 如🈶合作請聯系我,期待您的聯系。
????:本文撰寫于CSDN平臺,作者:xcLeigh所有權歸作者所有) ,https://blog.csdn.net/weixin_43151418,如果相關下載沒有跳轉,請查看這個地址,相關鏈接沒有跳轉,皆是抄襲本文,轉載請備注本文原地址。


???? 親,碼字不易,動動小手,歡迎 點贊 ? 收藏,如 🈶 問題請留言(評論),博主看見后一定及時給您答復,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/145570575(防止抄襲,原文地址不可刪除)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72063.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一學就會的深度學習基礎指令及操作步驟(3)模型訓練驗證

文章目錄 模型訓練驗證損失函數和優化器模型優化訓練函數驗證函數模型保存 模型訓練驗證 損失函數和優化器 loss_function nn.CrossEntropyLoss() # 損失函數 optimizer Adam(model.parameters()) # 優化器&#xff0c;優化參數模型優化 獲得模型所有的可訓練參數&#x…

Spring Boot 注解大全:全面解析與實戰應用

目錄 一、Spring Boot 啟動與配置相關注解 1.1 SpringBootApplication 1.2 EnableAutoConfiguration 1.3 Configuration 1.4 ComponentScan 二、依賴注入與組件管理注解 2.1 Component 2.2 Service 2.3 Repository 2.4 Controller 2.5 RestController 2.6 Autowired…

【語料數據爬蟲】Python爬蟲|批量采集征集意見稿數據(1)

前言 本文是該專欄的第5篇,后面會持續分享Python爬蟲采集各種語料數據的的干貨知識,值得關注。 在本文中,筆者將主要來介紹基于Python,來實現批量采集“征集意見稿”數據。同時,本文也是采集“征集意見稿”數據系列的第1篇。 采集相關數據的具體細節部分以及詳細思路邏輯…

企業招聘能力提升之道:突破困境,精準納才

企業招聘能力提升之道&#xff1a;突破困境&#xff0c;精準納才 在企業運營的廣袤版圖中&#xff0c;招聘工作無疑是一塊至關重要的拼圖。然而&#xff0c;不少企業在這片領域中舉步維艱&#xff0c;盡管投入了海量的時間與精力&#xff0c;收獲的成果卻不盡人意。面試環節仿…

AI對前端開發的沖擊

Cursor cursor新版本0.46版本號中有部分是改成了新布局其實 Agent 和 Edit 和 Composer 是一樣的&#xff0c;為了方便大家使用&#xff0c;我們把它們合并了&#xff0c;Edit 相當于普通模式下的 Composer&#xff0c;Agent 就是代理模式。 快捷鍵ctrli、ctrll、ctrlk 4o適合…

java中如何把json轉化的字符串再轉化成json格式

使用org.json庫 首先&#xff0c;確保你的項目中已經包含了org.json庫。如果你使用Maven&#xff0c;可以在pom.xml中添加以下依賴&#xff1a; <dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20210307…

泛型、泛型上限、泛型下限、泛型通配符

DAY8.1 Java核心基礎 泛型 Generics 是指在類定義時不指定類中信息的具體數據類型&#xff0c;而是用一個標識符來代替&#xff0c;當外部實例化對象時再指定具體的數據類型。 在定義類或者接口時不明確指定類中信息的具體數據類型&#xff0c;在實例化時再來指定具體的數據類…

Win10 下搭建免費的 FTP 服務器 FileZilla

一、概述 FileZilla 服務器是一個免費的開源FTP和FTPS服務器&#xff0c;是根據GNU通用公共許可證條款免費發布的開源軟件。FileZilla支持FTP、FTPS、SFTP等文件傳輸協議&#xff0c;相比其他FTP服務器&#xff0c;最大的優勢是FileZilla自由(免費)。 FileZilla的官網地址是&a…

C/C++中對字符處理的常用函數

C語言中的 ctype.h 頭文件提供了一系列字符分類和轉換函數&#xff0c;用于高效處理字符相關操作。這些函數通過接受 int 類型參數&#xff08;需為 unsigned char 或 EOF &#xff08;-1&#xff09;值&#xff09;&#xff0c;返回非零值表示條件正確&#xff0c;返回0表示錯…

雙指針算法介紹+算法練習(2025)

一、介紹雙指針算法 雙指針&#xff08;或稱為雙索引&#xff09;算法是一種高效的算法技巧&#xff0c;常用于處理數組或鏈表等線性數據結構。它通過使用兩個指針來遍歷數據&#xff0c;從而減少時間復雜度&#xff0c;避免使用嵌套循環。雙指針算法在解決諸如查找、排序、去重…

【每日八股】計算機網絡篇(四):HTTP

目錄 HTTP 與 HTTPS 的區別&#xff1f;HTTPS 加密與認證的過程&#xff1f;ClientHelloServerHello客戶端回應服務端回應 HTTPS 一定安全可靠嗎&#xff1f;HTTPS 狀態碼的含義&#xff1f;HTTP 緩存有哪些實現方式&#xff1f;HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的區…

TMS320F28P550SJ9學習筆記10:軟件模擬I2C通信_驅動1.3寸OLED

現在有了具體的I2C通信器件&#xff0c;一塊1.3寸OLED屏幕&#xff0c;今日嘗試移植配置一下: 本文主要講的是&#xff0c;使用軟件模擬I2C通信 文章提供測試代碼講解、完整工程下載、測試效果圖 目錄 前置文章&#xff1a; I2C通信引腳&#xff1a; 軟件I2C 引腳的初始化&am…

spring boot 發送郵件驗證碼

一、前置需求 1、準備郵箱 2、登錄授權碼 qq郵箱在–>設置–>賬號POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務 開啟服務 二、發送郵件 1、簡單郵件 包含郵件標題、郵件正文 2、引入mail啟動器 <dependency><groupId>org.springframework.boot</groupI…

塔能科技:智能機箱,為城市安防 “智” 造堅實堡壘

在當今智慧城市建設的浪潮中&#xff0c;城市安防面臨著諸多挑戰。設備管理難&#xff0c;眾多分散的安防設備猶如一盤散沙&#xff0c;難以實現高效統一的管控&#xff1b;數據傳輸不穩定&#xff0c;關鍵時刻信息的延遲或丟失&#xff0c;可能導致嚴重后果。這些問題嚴重制約…

電商數據分析 電商平臺銷售數據分析 電商平臺數據庫設計 揭秘電商怎么做數據分析

《電商參謀數據分析平臺方案》&#xff08;28頁PPT&#xff09;是一套為電商行業量身定制的一體化解決方案&#xff0c;它通過全鏈路打通從數據獲取到分析的全過程&#xff0c;幫助電商企業實現精細化運營和市場機會的挖掘。該方案針對電商行業在數據獲取、加工整合及業務賦能方…

uniapp uview 1.0 跨域h5配置多個代理、如何請求接口

參考文章&#xff1a;uniapp uView1.0跨域h5配置多個代理 官方手冊&#xff1a;http 請求 項目中使用&#xff1a; 參考其他博主的文章是在manifest.json中配置代理&#xff0c;但在官方的手冊中是直接在script請求的&#xff0c;我嘗試請求了下沒問題&#xff0c;上線后也不…

MAVEN解決版本依賴沖突

文章目錄 一、依賴沖突概念1、什么是依賴沖突2、依賴沖突的原因3、如何解決依賴沖突 二、查看依賴沖突-maven-helper1、安裝2、helper使用1、conflicts的閱讀順序&#xff08;從下向上看&#xff09;2、dependencies as List的閱讀順序&#xff08;從下向上看&#xff09;3、de…

79.ScottPlot的MVVM實現 C#例子 WPF例子

如何通過數據綁定在 WPF 中實現動態圖像顯示 在 WPF 應用程序中&#xff0c;通過數據綁定實現動態圖像顯示是一種高效且優雅的方式。以下是一個簡單的教程&#xff0c;展示如何使用 ScottPlot.WPF 庫和 MVVM 模式來實現這一功能。 第一步&#xff1a;安裝必要的 NuGet 包 首…

簡單工廠 、工廠方法模式和抽象工廠模式

簡單工廠 、工廠方法模式和抽象工廠模式 1.模式性質與定位 簡單工廠:并非正式的設計模式(屬編程習慣),通過單一工廠類根據參數判斷創建不同產品,本質是將對象創建邏輯集中管理。 工廠方法:是標準的創建型設計模式,定義抽象創建接口,由子類決定實例化哪個具體產品類,…

熱圖回歸(Heatmap Regression)

熱圖回歸(Heatmap Regression)是一種常用于關鍵點估計任務的方法,特別是在人體姿態估計中。它的基本思想是通過生成熱圖來表示某個關鍵點在圖像中出現的概率或強度。以下是熱圖回歸的主要特點和工作原理: 主要特點 熱圖表示: 每個關鍵點對應一個熱圖,熱圖中的每個像素值…