zoukankan      html  css  js  c++  java
  • wpf使用问题

    在类库中无法使用ConfigurationManager

    需要先引用DLL文件:

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll

    然后才可以使用

    System.Configuration.ConfigurationManager.AppSettings["SiteUrl"]

    WPF的showDialog有关问题

    WPF的showDialog问题
    最近在做一个数据监测的项目,需求是在主界面实现刷新的同时,可以同步刷新正在打开的曲线图界面,首次执行的时候没有问题,曲线也能实时刷新,但是当我关闭曲线图窗口重新打开时就会报错“关闭 Window 之后,无法设置 Visibility,也无法调用 Show、ShowDialogor 或 WindowInteropHelper.EnsureHandle。”,因为我是在主界面创建的曲线图实例,所以不能在打开之前新建窗口实例,否则就不能实现同步刷新了,我查了资料说重写窗口的Close方法,让窗口在关闭的时候Hide而不是close,代码如下:

            /// <summary>
            /// 重写Close
            /// </summary>
            /// <param name="e"></param>
            protected override void OnClosed(EventArgs e)
            {
                this.Hide();
            }
    

      

    但是我重写之后,问题同样存在.

    ------解决方案--------------------

    /// <summary>
    /// 重写Close
    /// </summary>
    /// <param name="e"></param>
    protected override void OnClosing(EventArgs e)//注意事件的名字,在关闭时,不是关闭后
    {
            this.Hide();
            e.Cancel = true;    
    }
    

    WPF: 再谈ShowDialog,Owner和ShowInTaskbar参数不可少

    ShowInTaskbar,当设置好Owner后,如果没有设置ShowInTaskbar为false(默认是true),看似用起来没问题,但是实际上会产生严重的问题。先来列个表,把Owner和ShowInTaskbar参数的影响列举一下,如下:

      没有设置Owner 设置Owner
    ShowInTaskbar 
    = true
    1. 任务栏会有两个窗口 
    2. 切换窗口会使父窗口置于子窗口之上 
    3. 父窗口无法点击
    和左边不同的是:切换窗口后,父窗口不会置于子窗口之上。 
    (这里看似还OK,实际上会产生严重的问题!!!)
    ShowInTaskbar 
    = false
    和上面不同的是:任务栏不会有两个窗口,
    但是点击任务栏图标后仍然会使父窗口置
    于子窗口之上,且父窗口无法点击。
    正确的ShowDialog方式!

    当设置好Owner但是ShowInTaskbar仍为true时,当在任务栏切换其他程序后再次切换到主程序后,会有一定几率出现只有父窗体会显示,且无法点击,子窗体不见了的情况,整个程序变成一种假死的状态,只能通过强行关闭进程方式来结束程序。(在Windows 7上有较大几率出现,其他系统没有试)

      

    WPF Image转换为ImageSource

    在WPF中通常图像都是使用图像源的方式“ImageSource”,个别情况我们在编写代码中得到的是一个 Image 对象 这个时候想要将其转换为“ImageSource” 于是就有了下面的代码:

    [DllImport("gdi32.dll", SetLastError = true)]
    private static extern bool DeleteObject(IntPtr hObject);
     
    //将 Bitmap转换为BitmapSource
    //使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。
    private static ImageSource BitmapToBitmapSource(Bitmap bitmap)
    {
        IntPtr hBitmap = bitmap.GetHbitmap();
        ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
            hBitmap,
            IntPtr.Zero,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());
        if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。
        {
            throw new System.ComponentModel.Win32Exception();
        }
     
        return wpfBitmap;
    }
  • 相关阅读:
    【转】虚拟机 NAT网络设置
    [转载]应用 Valgrind 发现 Linux 程序的内存问题
    Visual Studio 代码格式化插件(等号自动对齐、注释自动对齐等)
    【转】链接任意目录下库文件(解决错误“/usr/bin/ld: cannot find -lxxx”
    C语言实现封装、继承和多态
    美国专利搜索网站
    【转】基于OCS实现高速缓存
    【转】防止网页被搜索引擎、爬虫和网页采集器收录或克隆复制的方法汇总
    [转]机器学习和计算机视觉----数学基础
    [转]机器学习与数据挖掘的学习路线图
  • 原文地址:https://www.cnblogs.com/Daywei/p/2995547.html
Copyright © 2011-2022 走看看