||
******** axWindowsMediaPlayer1 结果很可能为0 ********
private void button9_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL = "2.mp4";
frameNum = 0;
timer1.Enabled = true;
}
/// <summary>
/// 可能因为媒体文件的打开需要一定时间,这里等待媒体文件的打开
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
if(this.axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
//Thread.Sleep(2000);
frameNum = axWindowsMediaPlayer1.currentMedia.duration;
if (frameNum > 0)
{
setTextBoxControlString(this.textBox1, axWindowsMediaPlayer1.currentMedia.name + ", frameNum=" + frameNum);
timer1.Enabled = false;
}
}
}
1、vs2005隐藏窗体
在窗体属性中,设置
windowState为minimized
showInTaskBar为false
隐藏窗体
问题:WinForm窗口,点击了右上角的关闭按钮,窗口是关了,但是进程仍然存在,需要手工结束进程。
原因:因为窗口运行的时候创建了前台线程,而前台线程会阻止进程终止,所以即使当窗口关闭但是进程一直无法结束。
解决方法:创建线程的时候,将线程的IsBackground属性设置成true,就可以了。
3、
解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题 (2013-08-16 14:24:29)
标签: it | 分类: 软件开发理论 |
右击“解决方案”--属性-调试栏-启用调试器部分-“启用Visual studio宿主进程”不勾选
如果让vs不生成这些“垃圾”(还有相应的批准文件.vshost.exe.config),可以这样来设置:项目→“某项目”属性→ 调试,將 “启用the Visual Studio 宿主进程”選項前的勾勾取消即可。
4、 C# WinForm中禁止改变窗口大小的方法
在Form类下面有一个FormBorderStyle的字段,我们可以通过设置它的值来让窗体不能被拉大拉小。FormBorderStyle的值设置为FormBorderStyle.FixedSingle或Fixed3D时,窗体大小是不能被改变的。
当然,还有一种情况,我们也应该要考虑到,那就是窗体最大化。所以,我们要将窗体最大化的功能去掉,即this.MaximizeBox = false;。
5、 指定窗口显示位置的方法
this.Top = SystemInformation.WorkingArea.Height / 3;
this.Left = SystemInformation.WorkingArea.Width / 3 ;
6、C# 设置电脑关机、重启、注销、锁定、关闭显示器的类(支持win7,win8)
[DllImport("user32")]
public static extern bool ExitWindowsEx(uint uFlags,uint dwReason);
[DllImport("user32")]
public static extern void LockWorkStation();
[DllImport("user32")]
public static extern int SendMessage(int hWnd,int hMsg,int wParam,int lParam);
public enum MonitorState
{
MonitorStateOn=-1,
MonitorStateOff=2,
MonitorStateStandBy=1
}
public static void ShutDown()
{
try
{
System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo("shutdown.exe", "-s -t 00");
System.Diagnostics.Process.Start(startinfo);
}
catch { }
}
public static void Restart()
{
try
{
System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo("shutdown.exe", "-r -t 00");
System.Diagnostics.Process.Start(startinfo);
}
catch { }
}
public static void LogOff()
{
try
{
ExitWindowsEx(0, 0);
}
catch { }
}
public static void LockPC()
{
try
{
LockWorkStation();
}
catch { }
}
public static void Turnoffmonitor()
{
SetMonitorInState(MonitorState.MonitorStateOff);
}
private static void SetMonitorInState(MonitorState state)
{
SendMessage(0xFFFF, 0x112, 0xF170, (int)state);
}
网页加载完毕后触发事件
1、WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。由此可见,实际上DocumentCompleted事件会在Interactive状态和Complete状态各调用一次,那么我们可以根据我们的需要来判断到底需要那一次。解决办法实例代码如下:
复制代码代码如下:
if(webBrowser1.ReadyState!=WebBrowerReadyState.Complete)
return;
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//1、若不知道网页中控件的ID(name),则可以通过查看控件的起始坐标也可以
if (webBrowser1.ReadyState ==WebBrowserReadyState.Complete)
{
try
{
webBrowser1.Document.GetElementById("username").InnerText = this.textBox2.Text.Trim();
webBrowser1.Document.GetElementById("password").InnerText = this.textBox3.Text.Trim();
webBrowser1.Document.GetElementById("loginBtn").InvokeMember("click");
}
catch (Exception ex)
{
//this.textBox1.Text = ex.ToString();
}
}
}
8. C#中Application.DoEvents()的作用
Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息。
交出CPU控制权,让系统可以处理队列中的所有Windows消息,比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应,因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作的内部调用它,而去处理消息队列中的消息。像鼠标移动鼠标点击都是windows消息,如果耗时操作一直进行,那么界面就像死锁一样。
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
label1.Text = i.ToString();
Application.DoEvents();
}
}
测试了一下,没有Application.DoEvents()的时候,Label基本处于假死机状态,最后显示一个9999,加上后会数字变换正常显示。
从这个测验后DoEvents的功能,应该DoEvents就好比实现了进程的同步。在不加的时候,因为优先级的问题,程序会执行主进程的代码,再执行别代码,而加了以后就可以同步执行。
private void Delay(int Millisecond)
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();
}
return;
}
9.
C# WinForm程序完全退出的问题解决
作者: 字体:[增加 减小] 类型:转载 时间:2013-05-22 我要评论
C# WinForm程序完全退出的问题解决,需要的朋友可以参考一下
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
2.Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
4.System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
5.Application.Restar(); 注销 开启新实例
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 02:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社