[转]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_x86\dotnet1\crdb_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 Settings\Administrator\Local Settings\Temp 这个目录文件太多导致的,客户系统是 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(); }
获取项目资源的方式如上。