精华内容
下载资源
问答
  • wpf版本转场动画

    2016-10-18 15:27:01
    wpf版本转场动画
  • wpf版本人脸识别,虹软的SDK3.0 全部开源。公司商用可以参考的,以前公司软件用过,效率不错.里面有表情包可以参考,
  • 俄罗斯方块wpf版本

    2011-05-30 08:28:19
    俄罗斯方块wpf版本 源码 wpf winform升级版 wpf演示
  • WPF版本老虎机

    热门讨论 2012-10-28 13:39:00
    WPF版本老虎机,采用三层架构设计模式,代码精辟,思路清晰,资源调用统一高效
  • WPF版本贪吃蛇

    2019-09-05 11:50:18
    主要使用的WPF MVVM 思想进行的开发示例,可进行优化,增加分数等功能
  • WPF版本的WEB测试小程序,还net4log的使用.WPF版本的WEB测试小程序,还net4log的使用.
  • 灵活标记格式(FTF)是一种使用人类可读标签的完全灵活的存储格式,并且可能支持存储任何类型的数据。 这是C#/ WPF版本
  • WPF版本的扫雷

    2016-06-21 18:09:08
    WPF扫雷
  • 海康WPF版本源码

    2017-11-01 15:02:12
    WPF开发的海康视频监控源码,有需要的朋友可以下载。WPF开发的海康视频监控源码,有需要的朋友可以下载。
  • SharePoint-Printing-ModernUI SharePoint 打印应用程序的现代 UI WPF 版本
  • 基于Visifire的WPF图标示例,可直接运行。 (Based on WPF sample chart with Visifire,which can be run directly.)
  • 最近公司在做WPF生成二维码 所以自己就写了个winForm+Web+WPF版本 生成二维码 只是把相应的图片Image类转换一下。
  • wpf版本的计算器

    2013-07-26 12:03:09
    WPF实现的简易计算器,供广大初学者学习!
  • 大文件搜索(源码)。项目注释完整 wpf编写 快速搜索指定盘符中指定大的小文件。 需要一定的wpf编程基础,可供学习参考
  • WPF版本的自动更新程序

    万次阅读 2011-05-21 18:37:00
    软件本身是用VS2010写的WPF版本的,所以更新程序也就决定用WPF来做吧。虽说,以前用WinForm做过,感觉应该是差不多。可实际操作过程中间,还是碰到了一些不太一样的地方吧。不过,原理都是一样一样滴。这里,只是...

      最近,拿到的项目代码是用WPF写的。C/S结构的东西更新起来不太方便。于是,就决定做个自动更新程序吧。软件本身是用VS2010写的WPF版本的,所以更新程序也就决定用WPF来做吧。虽说,以前用WinForm做过,感觉应该是差不多。可实际操作过程中间,还是碰到了一些不太一样的地方吧。不过,原理都是一样一样滴。

      这里,只是更新程序的代码,至于版本判断的方法,方式多多吧。这里的更新程序,需要放在软件主程序同目录下,而且我把客户端的版本号放在了软件的配置文件中了。在更新完成后会去修改里边的版本信息。至于,zip包的解压,引用了ICSharpCode.SharpZipLib.dll,网上很多下载的。

      App.xaml.cs代码

     

      MainWindow.xaml.cs代码

      更新程序的App.config

       

     

    展开全文
  • WPF版本的赛车小游戏

    2014-05-09 15:35:30
    WPF写的简单的赛车小游戏,内含详细代码,用C#写的
  • MES系统源代码 MES系统快速框架 .net源码 三层架构 ui+bll+dal和EF框架 wpf版本 Oracle数据库

    MES系统源代码 MES系统快速框架 .net源码 三层架构 ui+bll+dal和EF框架 wpf版本 Oracle数据库

    请添加图片描述
    请添加图片描述

    展开全文
  • wpf版本的一个特效

    2009-10-31 17:21:47
    Wpf 做的一个颜色特效 有仿visita的很炫的效果 界面很简单 但是可以拿来做练习用
  • 如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 Lambda 表达式可以完成。不过,使用 Lambda 表达式会带来变量捕获的一些问题,比如说你需要区分一个变量作用于是在 ...

    如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 Lambda 表达式可以完成。不过,使用 Lambda 表达式会带来变量捕获的一些问题,比如说你需要区分一个变量作用于是在 Lambda 表达式中,还是当前上下文全局(被 Lambda 表达式捕获到的变量)。然后,在静态分析的时候,也难以知道此 Lambda 表达式在整个方法中的执行先后顺序,不利于分析潜在的 Bug。

    在使用 async/await 关键字编写异步代码的时候,虽然说实质上也是捕获变量,但这时没有显式写一个 Lambda 表达式,所有的变量都是被隐式捕获的变量,写起来就像在一个同步方法一样,便于理解。


    C++/WinRT

    以下 C++/WinRT 的代码来自 Raymond Chen 的示例代码。Raymond Chen 写了一个 UWP 的版本用于模仿 C++/WinRT 的线程切换效果。在看他编写的 UWP 版本之前我也思考了可以如何实现一个 .NET / WPF 的版本,然后成功做出了这样的效果。

    Raymond Chen 的版本可以参见:C++/WinRT envy: Bringing thread switching tasks to C# (UWP edition) - The Old New Thing

    winrt::fire_and_forget MyPage::Button_Click()
    {
      // We start on a UI thread.
      auto lifetime = get_strong();
    
      // Get the control's value from the UI thread.
      auto v = SomeControl().Value();
    
      // Move to a background thread.
      co_await winrt::resume_background();
    
      // Do the computation on a background thread.
      auto result1 = Compute1(v);
      auto other = co_await ContactWebServiceAsync();
      auto result2 = Compute2(result1, other);
    
      // Return to the UI thread to provide an interim update.
      co_await winrt::resume_foreground(Dispatcher());
    
      // Back on the UI thread: We can update UI elements.
      TextBlock1().Text(result1);
      TextBlock2().Text(result2);
    
      // Back to the background thread to do more computations.
      co_await winrt::resume_background();
    
      auto extra = co_await GetExtraDataAsync();
      auto result3 = Compute3(result1, result2, extra);
    
      // Return to the UI thread to provide a final update.
      co_await winrt::resume_foreground(Dispatcher());
    
      // Update the UI one last time.
      TextBlock3().Text(result3);
    }
    

    可以看到,使用 co_await winrt::resume_background(); 可以将线程切换至线程池,使用 co_await winrt::resume_foreground(Dispatcher()); 可以将线程切换至 UI。

    也许你会觉得这样没什么好处,因为 C#/.NET 的版本里面 Lambda 表达式一样可以这么做:

    await Task.Run(() =>
    {
        // 这里的代码会在线程池执行。
    });
    // 这里的代码会回到 UI 线程执行。
    

    但是,现在我们给出这样的写法:

    // 仅在某些特定的情况下才使用线程池执行,而其他情况依然在主线程执行 DoSomething()。
    if (condition) {
      co_await winrt::resume_background();
    }
    
    DoSomething();
    

    你就会发现 Lambda 的版本变得很不好理解了。

    C# / .NET / WPF 版本

    我们现在编写一个自己的 Awaiter 来实现这样的线程上下文切换。

    关于如何编写一个 Awaiter,可以阅读我的其他博客:

    这里,我直接贴出我编写的 DispatcherSwitcher 类的全部源码。

    using System;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    using System.Windows.Threading;
    
    namespace Walterlv.ThreadSwitchingTasks
    {
        public static class DispatcherSwitcher
        {
            public static ThreadPoolAwaiter ResumeBackground() => new ThreadPoolAwaiter();
    
            public static ThreadPoolAwaiter ResumeBackground(this Dispatcher dispatcher)
                => new ThreadPoolAwaiter();
    
            public static DispatcherAwaiter ResumeForeground(this Dispatcher dispatcher) =>
                new DispatcherAwaiter(dispatcher);
    
            public class ThreadPoolAwaiter : INotifyCompletion
            {
                public void OnCompleted(Action continuation)
                {
                    Task.Run(() =>
                    {
                        IsCompleted = true;
                        continuation();
                    });
                }
    
                public bool IsCompleted { get; private set; }
    
                public void GetResult()
                {
                }
    
                public ThreadPoolAwaiter GetAwaiter() => this;
            }
    
            public class DispatcherAwaiter : INotifyCompletion
            {
                private readonly Dispatcher _dispatcher;
    
                public DispatcherAwaiter(Dispatcher dispatcher) => _dispatcher = dispatcher;
    
                public void OnCompleted(Action continuation)
                {
                    _dispatcher.InvokeAsync(() =>
                    {
                        IsCompleted = true;
                        continuation();
                    });
                }
    
                public bool IsCompleted { get; private set; }
    
                public void GetResult()
                {
                }
    
                public DispatcherAwaiter GetAwaiter() => this;
            }
        }
    }
    

    Raymond Chen 取的类名是 ThreadSwitcher,不过我认为可能 Dispatcher 在 WPF 中更能体现其线程切换的含义。

    于是,我们来做一个试验。以下代码在 MainWindow.xaml.cs 里面,如果你使用 Visual Studio 创建一个 WPF 的空项目的话是可以找到的。随便放一个 Button 添加事件处理函数。

    private async void DemoButton_Click(object sender, RoutedEventArgs e)
    {
        var id0 = Thread.CurrentThread.ManagedThreadId;
    
        await Dispatcher.ResumeBackground();
    
        var id1 = Thread.CurrentThread.ManagedThreadId;
    
        await Dispatcher.ResumeForeground();
    
        var id2 = Thread.CurrentThread.ManagedThreadId;
    }
    

    id0 和 id2 在主线程上,id1 是线程池中的一个线程。

    这样,我们便可以在一个上下文中进行线程切换了,而不需要使用 Task.Run 通过一个 Lambda 表达式来完成这样的任务。

    现在,这种按照某些特定条件才切换到后台线程执行的代码就很容易写出来了。

    // 仅在某些特定的情况下才使用线程池执行,而其他情况依然在主线程执行 DoSomething()。
    if (condition)
    {
        await Dispatcher.ResumeBackground();
    }
    
    DoSomething();
    

    Raymond Chen 的版本

    Raymond Chen 后来在另一篇博客中也编写了一份 WPF / Windows Forms 的线程切换版本。请点击下方的链接跳转至原文阅读:

    我在为他的代码添加了所有的注释后,贴在了下面:

    using System;
    using System.Runtime.CompilerServices;
    using System.Threading;
    using System.Windows.Forms;
    using System.Windows.Threading;
    
    namespace Walterlv.Windows.Threading
    {
        /// <summary>
        /// 提供类似于 WinRT 中的线程切换体验。
        /// </summary>
        /// <remarks>
        /// https://devblogs.microsoft.com/oldnewthing/20190329-00/?p=102373
        /// https://blog.walterlv.com/post/bring-thread-switching-tasks-to-csharp-for-wpf.html
        /// </remarks>
        public class ThreadSwitcher
        {
            /// <summary>
            /// 将当前的异步等待上下文切换到 WPF 的 UI 线程中继续执行。
            /// </summary>
            /// <param name="dispatcher">WPF 一个 UI 线程的调度器。</param>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续任务切换到 UI 线程执行。</returns>
            public static DispatcherThreadSwitcher ResumeForegroundAsync(Dispatcher dispatcher) =>
                new DispatcherThreadSwitcher(dispatcher);
    
            /// <summary>
            /// 将当前的异步等待上下文切换到 Windows Forms 的 UI 线程中继续执行。
            /// </summary>
            /// <param name="control">Windows Forms 的一个控件。</param>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续任务切换到 UI 线程执行。</returns>
            public static ControlThreadSwitcher ResumeForegroundAsync(Control control) =>
                new ControlThreadSwitcher(control);
    
            /// <summary>
            /// 将当前的异步等待上下文切换到线程池中继续执行。
            /// </summary>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续的任务切换到线程池执行。</returns>
            public static ThreadPoolThreadSwitcher ResumeBackgroundAsync() =>
                new ThreadPoolThreadSwitcher();
        }
    
        /// <summary>
        /// 提供一个可切换到 WPF 的 UI 线程执行上下文的可等待对象。
        /// </summary>
        public struct DispatcherThreadSwitcher : INotifyCompletion
        {
            internal DispatcherThreadSwitcher(Dispatcher dispatcher) =>
                _dispatcher = dispatcher;
    
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public DispatcherThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成线程池到 WPF UI 线程的切换。
            /// </summary>
            public bool IsCompleted => _dispatcher.CheckAccess();
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到 WPF 的 UI 线程。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => _dispatcher.BeginInvoke(continuation);
    
            private readonly Dispatcher _dispatcher;
        }
    
        /// <summary>
        /// 提供一个可切换到 Windows Forms 的 UI 线程执行上下文的可等待对象。
        /// </summary>
        public struct ControlThreadSwitcher : INotifyCompletion
        {
            internal ControlThreadSwitcher(Control control) =>
                _control = control;
    
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public ControlThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成线程池到 Windows Forms UI 线程的切换。
            /// </summary>
            public bool IsCompleted => !_control.InvokeRequired;
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到 Windows Forms 的 UI 线程。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => _control.BeginInvoke(continuation);
    
            private readonly Control _control;
        }
    
        /// <summary>
        /// 提供一个可切换到线程池执行上下文的可等待对象。
        /// </summary>
        public struct ThreadPoolThreadSwitcher : INotifyCompletion
        {
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public ThreadPoolThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成 UI 线程到线程池的切换。
            /// </summary>
            public bool IsCompleted => SynchronizationContext.Current == null;
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到线程池中。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => ThreadPool.QueueUserWorkItem(_ => continuation());
        }
    }
    

    参考资料


    我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

    如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • WPF MVVM 初级版本

    2019-11-08 13:20:52
  • wpf揭秘pdf版本

    2012-03-24 11:50:26
    wpf揭秘下载,wpf揭秘pdf下载,wpf揭秘书电子版
  • WPF揭秘pdf版本

    2012-12-15 11:04:15
    国内第一本写WPF的书籍,适合WPF初学者和需要提高的学习
  • WPF自动检测更新版本

    2018-11-05 10:11:39
    WPF实现客户端版本的检测,更新操作,实现客户端程序的自动更新。
  • CefSharp.WPF 与 visualStudio版本

    千次阅读 2017-04-26 10:43:35
    目前来看,CefSharp.WPF 版本主要与 vc++的版本对应: Branch CEF Version VC++ Version .Net Version Status master 2987 2013 4.5.2 Development cefsharp/57 2987 2013 4.5.2 Release cefsharp/
  • pure mvc c#版本 wpf

    2012-12-25 16:39:32
    pure mvc c#版本 前端UI是Wpf
  • 深入浅出WPF这本书可以说是每位学WPF编程必看之作,目前下载的pdf文档都是没有书签的,好不容易有这一本完整书签,现拿出来给大家看看。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,135
精华内容 9,654
关键字:

wpf版本