zoukankan      html  css  js  c++  java
  • [转]Winform 经验集

    多线程篇:
    CheckForIllegalCrossThreadCalls = false;

    更多示例可见: http://www.cnblogs.com/z5337/p/4030287.html

    if (!this.IsHandleCreated || this.Disposing || this.IsDisposed) return;
    Invoke((MethodInvoker)(delegate {
        // UI界面操作代码
    }));
    new Thread(delegate() {
    // 准备在后台执行的代码
    }).Start();

     以上代码中,BeginInvoke、Invoke、MethodInvoker、EventHandler 可以互换

    使用 BeginInvoke 之后,可以执行以下操作:

    1. 进行某些操作,然后调用 EndInvoke 一直阻止到调用完成。

    2. 使用  System.IAsyncResult.AsyncWaitHandle 属性获取 WaitHandle, 使用它的 WaitOne 方法一直阻止执行直到发出 WaitHandle 信号,然后调用 EndInvoke.

    3. 轮询由 BeginInvoke 返回的 IAsyncResult ,确定异步调用何时完成,然后调用 EndInvoke.

    4. 将用于回调方法的委托传递给 BeginInvoke。 异步调用完成后,将在 ThreadPool 线程上执行该方法。该回调方法将调用 EndInvoke 。

    注意:每次都要调用 EndInvoke 来完成异步调用。

    自定义窗体时,界面控件更新避免闪烁的太频繁的一个方法是:http://www.cnblogs.com/liutao409/archive/2010/12/20/1911470.html

    在需要大量刷新控件前,对窗体发送一个SendMessage(toFreezeControl.Handle, WM_SETREDRAW, 0, 0);消息,这样就冻结了窗体和所有窗体子控件的刷新功能。

    等刷新操作完成后,在对窗体发送一个SendMessage(toFreezeControl.Handle, WM_SETREDRAW, 1, 0);强制窗体和控件完成一次刷新。

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

     要使  .net 4 支持 async 可以安装 nuget Microsoft.Bcl.Async  

    经实际测试并不好用,不止要打补丁 NDP40-KB2468871-v2-x86.exe,而且在 xp / win 7 下都可能报以下错

    【异常信息】
    A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.

    加入 System.Threading.Tasks.TaskScheduler.UnobservedTaskException += (s, v) => { };  此代码也没有改善。

    -------- 

    Reactive Extensions 使并行支持更多平台 可以安装 nuget Rx-Main

    TPL 数据流库 可以安装 NuGet 包 Microsoft.Tpl.Dataflow

    并发编程的集合在 .NET 框架,不可变集合在 NuGet 包 Microsoft.Bcl. Immutable

    安装以上 nuget 后在 XP 下提示下面的错误

     未能加载文件或程序集“System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047) 
    说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

    摘自: http://www.cnblogs.com/yelaiju/p/3375168.html

    下载: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=3556

    后运行正常。

    最新 Crystal Reports 之 VS2013 及客户端安装包下载链接

    http://pan.baidu.com/s/1miltrUo

    编译含 Crystal Reports 的程序集时如遇到错误 未能加载文件或程序集 win32_x86dotnet1crdb_adoplus.dll 或它的某一个依赖项

    解决方法:http://blog.csdn.net/zlbcdn/article/details/8925121 在 App.config 中加入

    <startup  useLegacyV2RuntimeActivationPolicy="true">  
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>  
    </startup> 

    listBox 控件加入颜色:http://www.cnblogs.com/wintalen/archive/2011/08/16/2140196.html

            // listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            private void listBox1_DrawItem(object sender, DrawItemEventArgs e) {
                e.DrawBackground();
                if (e.Index > -1) {
                    string s = listBox1.Items[e.Index].ToString();
                    if (!string.IsNullOrEmpty(s)) {
                        Color vColor = e.ForeColor;
                        switch (s[0]) {
                            case 'b':
                                vColor = Color.Blue;
                                break;
                            case 'e':
                                vColor = Color.Red;
                                break;
                            case 'g':
                                vColor = Color.Gray;
                                break;
                        }
                        using (Brush b = new SolidBrush(vColor)) {
                            e.Graphics.DrawString(s.Substring(1), e.Font, b, e.Bounds);
                        }
                    }
                }
                e.DrawFocusRectangle();
            }

     一次客户端报异常:无法创建目录或文件。并且没有其它提示,反复判断故障原因,最后发现是

    C:Documents and SettingsAdministratorLocal SettingsTemp 这个目录文件太多导致的,客户系统是 Win XP,C盘是 FAT32 格式,删除此文件夹后程序正常。

    System.IO.Stream SuccessFileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("TestApplication1.Success.wav");
    if (SuccessFileStream != null)
    {
        SuccessSP = new System.Media.SoundPlayer();
        SuccessSP.Stream = SuccessFileStream;
        SuccessSP.Play();
    }

    获取项目资源的方式如上。

  • 相关阅读:
    07 selenium模块基本使用
    06 高性能异步爬虫
    05 request高级操作
    04 验证码识别
    03 数据解析
    02 requests模块
    01 爬虫简介
    Get和Post的正解
    pytoch之 encoder,decoder
    pytorch之 RNN 参数解释
  • 原文地址:https://www.cnblogs.com/z5337/p/6370793.html
Copyright © 2011-2022 走看看