WinForm(C#)相关知识和经验的碎片化记录
1、引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常
出现"System.Windows.Forms.AxHost+InvalidActiveXStateException"异常多是引用第三方控件引起的。在NEW时,需要初始化该对象。
AxESACTIVEXLib.AxESActiveX ax = new AxESACTIVEXLib.AxESActiveX(); ((System.ComponentModel.ISupportInitialize)(this.ax)).BeginInit();
this.Controls.Add(ax);
((System.ComponentModel.ISupportInitialize)(this.ax)).EndInit();
注意:该解决方法的使用有待商榷,发现用这种方法会影响界面其它控件的显示。
2、PictureBox控件的Image属性显示网络图片
PictureBox1.Image = Image.FromStream(WebRequest.Create("https://www.baidu.com/img/bd_logo1.png").GetResponse().GetResponseStream());
3、事件的注册与注销的问题
某事件被多次注册时,那么该事件也将会多次触发,其对应的事件处理函数也将被多次调用。
g_kyTTS.SpeakCompletedFlagChanged += new KyTTS.SpeakCompletedFlagChangedEventHandler(g_kyTTS_SpeakCompletedFlagChanged); //注册事件
所以,注册事件后应该要考虑到在合适的地方进行事件的注销
g_kyTTS.SpeakCompletedFlagChanged -= new KyTTS.SpeakCompletedFlagChangedEventHandler(g_kyTTS_SpeakCompletedFlagChanged); //注销事件
4、通过正则表达式获取英文句子字符串中的英文单词数
MatchCollection mc = Regex.Matches("Hello,World!", @"\d+.\d+|\w+");
int l_nSenWordCnt = mc.Count; //英文句子的单词数
5、播放嵌入到资源文件(.resx)的音频
SoundPlayer 类提供了加载和播放 .wav 文件的简单界面。SoundPlayer 类支持从文件路径、URL、包含 .wav 文件的 Stream 或包含 .wav 文件的嵌入资源中加载 .wav 文件。
System.Media.SoundPlayer simpleSound = new System.Media.SoundPlayer(Properties.Resources.ResourceManager.GetStream("Du"));
simpleSound.Play();
6、文件(夹)上传到ftp时,出现“远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)”异常
可能是如下原因:
(1)、URL路径不对,看看有没有多加空格,或者大小写问题;
(2)、权限是否足;
(3)、需要反复连接的时候,如GetFileList,需要递归获得所有文件,keepAlive则设成false,一个查询请求完了后就关闭。
7、跨线程访问控件的属性时,出现“线程间操作无效: 从不是创建控件“XXX”的线程访问它”异常
产生原因:
如果从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常。访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。
解决办法:
(1)、通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;来解决,在程序初始化的时候设置这个属性,而且使用的控件都是微软.Net Framework类库中的控件。
(2)、利用委托
delegate void SetTextCallBack(string text);
private void SetText(string text)
{
if (this.txt_a.InvokeRequired)
{
SetTextCallBack stcb = new SetTextCallBack(SetText);
this.Invoke(stcb , new object[] { text});
}
else
{
this.txt_a.Text = text;
}
}
private void LoadData()
{
SetText("测试");
}
//窗体加载时,用线程加载数据
private void Frm_ImportManager_Load(object sender, EventArgs e)
{
ThreadStart ts = new ThreadStart(LoadData);
Thread thread = new Thread(ts);
thread.Name = "LoadData";
thread.Start();
}
(3)、使用BackgroundWorker控件
// This event handler starts the form's
// BackgroundWorker by calling RunWorkerAsync.
//
// The Text property of the TextBox control is set
// when the BackgroundWorker raises the RunWorkerCompleted
// event.
private void setTextBackgroundWorkerBtn_Click(object sender,EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
// This event handler sets the Text property of the TextBox
// control. It is called on the thread that created the
// TextBox control, so the call is thread-safe.
//
// BackgroundWorker is the preferred way to perform asynchronous
// operations.
private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
this.textBox1.Text = "This text was set safely by BackgroundWorker.";
}
参考博文:http://www.cnblogs.com/luckboy/archive/2010/12/19/1910785.html
8、判断事件是否已经被注册过
用反射取出事件绑定的委托实例,然后用GetInvocationList就可以得到所有注册的方法了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace WA
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); this.Load+=new EventHandler(Form1_Load1);
this.Load+=new EventHandler(Form1_Load2); PropertyInfo propertyInfo = (typeof(Form)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(this, null);
FieldInfo fieldInfo = (typeof(Form)).GetField("EVENT_LOAD", BindingFlags.Static | BindingFlags.NonPublic); Delegate d = eventHandlerList[fieldInfo.GetValue(null)]; if (d != null)
{
foreach (Delegate de in d.GetInvocationList())
Console.WriteLine(de.Method.Name);
}
}
private void Form1_Load1(object sender, EventArgs e)
{
//TODO
}
private void Form1_Load2(object sender, EventArgs e)
{
//TODO
}
}
}
------------------------------------------------------2016-06-29------------------------------------------------------
9、控件的层次显示问题
//a在上
Controls.Add(a);
Controls.Add(b);
// b在上
Controls.Add(b);
Controls.Add(a);
10、窗体添加到容器控件中去
Form g_std = new Form();
g_std.TopLevel = false;
panel1.Controls.Add(g_std);
不能显示为模式窗体,既不能这样:
g_std.show(panel1);
------------------------------------------------------2016-08-25------------------------------------------------------
11、将.resx文件中的文件流写入系统临时文件夹
using System.IO;
/// <summary>
/// 将音频资源文件写入系统临时文件夹
/// </summary>
/// <returns></returns>
private string WriteDuResToSysTempFolder()
{
string l_sTempPath = Path.GetTempPath(); //临时文件夹
string l_sAudioFileName = l_sTempPath + "Du.wav"; //临时文件夹下的文件 //先判断文件是否存在(如果不存在,将其写入临时文件夹)
if (!File.Exists(l_sAudioFileName))
{
//把资源里的音频文件变为字节数组
byte[] buf = StreamToBytes(Properties.Resources.Du);
//写到临时文件里面
File.WriteAllBytes(l_sAudioFileName, buf);
} return l_sAudioFileName;
}
/// <summary>
/// 将 Stream 转成 byte[]
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
private byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin);
return bytes;
}
......
WinForm(C#)相关知识和经验的碎片化记录的更多相关文章
- React相关知识和经验的碎片化记录
React相关知识和经验的碎片化记录 1.Warning: validateDOMNesting(...): Whitespace text nodes cannot appear as a chil ...
- 开发工具Visual Studio使用相关知识和经验的碎片化记录
开发工具Visual Studio使用相关知识和经验的碎片化记录 1.Visual Studio提示"无法启动IIS Express Web服务器"的解决方法 有时,在使用Visu ...
- HTML相关知识和经验的碎片化记录
1.标签input在type="file"时,name是必须属性 <form id="MainFileUpload" name="MainFil ...
- windows cmd命令相关知识和经验的碎片化记录
1.循环遍历当前文件夹下的所有*.dll文件,并打印其绝对路径和相对路径 ``` for /f "tokens=*" %%a in ('dir /s/b/a-d "*.d ...
- IIS相关知识和经验的碎片化记录
1.IIS(Internet Information Services)网站本机可以访问,局域网其他机器无法访问 导致这个问题之一是防火墙规则,解决办法如下: [开始]打开[控制面板],选择[WIND ...
- AngularJs(v1)相关知识和经验的碎片化记录
1.利用angular指令监听ng-repeat渲染完成后执行脚本 http://www.cnblogs.com/wangmeijian/p/5141266.html 2.$http的POST请求中请 ...
- Asp.net相关知识和经验的碎片化记录
1.解决IIS7.0下“HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求”问题 方案1:在程序的web.config中system.web节点里 ...
- SQL Server相关知识和经验的碎片化记录
1.在向服务器发送请求时发生传输级错误 在向服务器发送请求时发生传输级错误. (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接.) ---> Sy ...
- JavaScript相关知识和经验的碎片化记录
1.JavaScript提示“未结束的字符串常量”错误解决方法 1.1 JavaScript引用时,使用的字符语言不一致. 比如:<script type=”text/javascript ...
随机推荐
- WPF之X名称空间学习
WPF的X名称空间都有什么呢?首先,盗用张图来说明: 我将就图表中的内容进行总结: 1.x:Array具有一个Iteams属性,它能暴漏一个ArratList实例,ArratList实例的内部成员类型 ...
- js1
document.write('<h1>Hello World</h1>'); //写入网页 alert('Hello World'); console.log('Hello ...
- webrtc 术语
参考网址 https://webrtcglossary.com/ ORTC stands for Object-RTC.ORTC is an initiative involving Google, ...
- TCP之半关闭与CLOSE_WAIT
终止一个连接要经过4次握手.这由TCP的半关闭(half-close)造成的.既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭 ...
- ASP.NET MVC5中View显示Html
@Html.Raw(Model.Name) @(new HtmlString(Model.Name));
- (转)list_orderby
本文转载自:http://blog.csdn.net/liyifei21/article/details/6558098 一个条件排序情况 list.OrderBy(item => tem.St ...
- HBase之八--(1):HBase二级索引的设计(案例讲解)
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...
- Regexp:目录
ylbtech-Regexp:目录 1.返回顶部 1. http://www.runoob.com/regexp/regexp-tutorial.html 2. 2.返回顶部 3.返回顶部 4 ...
- Python函数(一)-return返回值
定义一个函数可以在最后加上return返回值,方便查看函数是否运行完成和返回函数的值 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR&qu ...
- PowerDesigner CDM中取消默认不能存在同名主键的方法
This data item is already used in a primary identifier.Normalization rules prevent ... 处理的方法为: 菜单栏上的 ...