这几天写程序需要用到工作完毕自动退出,之前C#一直使用Application.Exit() ,这次使用的时候发现加上这句代码之后程序窗体确实关闭了,但是从任务管理器中可以看到线程仍然存在。
后来从查MSDN和从网上查资料才得知,Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,要想强制突出当前程序要用:System.Environment.Exit(int exitcode)方法。该方法:终止当前进程并为基础操作系统提供指定的退出代码。
所以在程序中需要强制退出的地方加上System.Environment.Exit(System.Environment.ExitCode);
还有一种方法: System.Threading.Thread.CurrentThread.Abort();
或者 Process.GetCurrentProcess().Kill()
或者 Application.ExitThread();
或者 Application.ExitThread()
不过以上方法,都是强制直接退出了整个程序,不只是关闭子窗体。可能还会引发某些问题,
我感觉最好方法的就是,在子窗体的Closing事件中,写循环退出条件,这样就可以避免某些未知的错误,而且可以只关闭子窗体,并释放子窗体占用的资源。
Application.Exit(); 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口
Application.Exit 是一种强行退出方式,就像 Win32 的 PostQuitMessage()。它意味着放弃所有消息泵,展开调用堆栈,并将执行返回给系统。
Popularity: 17% [?]
今天看一个源码,有个特点是使用DataGridView和DateTable来显示数据。之前张筱祥总是喜欢用listbox和listview来显示数据,用起来也挺习惯,但是DataGridView有很多listview无法比拟的特点。这里记录下他在Winform中结合DateTabble的常用方法。
Code
- //1. 创建table 并建立列表头
- DataTable table = new DataTable();
- DataColumn c1 = new DataColumn("订单编号", typeof(string));
- table.Columns.Add(c1);
- DataColumn c2 = new DataColumn("买家昵称", typeof(string));
- table.Columns.Add(c2);
- DataColumn c3 = new DataColumn("卖家昵称", typeof(string));
- table.Columns.Add(c3);
- DataColumn c4 = new DataColumn("订单状态", typeof(string));
- table.Columns.Add(c4);
- DataColumn c5 = new DataColumn("商品标题", typeof(string));
- table.Columns.Add(c5);
- DataColumn c6 = new DataColumn("价格", typeof(string));
- table.Columns.Add(c6);
- DataColumn c7 = new DataColumn("数量", typeof(string));
- table.Columns.Add(c7);
-
- //2. 循环给DataTable 建立行
- foreach (Trade trade in trades)
- {
- DataRow r1 = table.NewRow();
- r1["卖家昵称"] = trade.SellerNick;
- r1["买家昵称"] = trade.BuyerNick;
- r1["订单编号"] = trade.Tid;
- r1["订单状态"] = trade.Status;
- if (trade.OrderList != null && trade.OrderList.Count > 0)
- {
- Order order = trade.OrderList[0];
- r1["商品标题"] = order.ItemTitle;
- r1["价格"] = order.ItemPrice;
- r1["数量"] = order.ItemNum;
- }
- table.Rows.Add(r1);
- }
-
- //3. 设置 DataGridView的数据源为table
- this.tradeDataGrid.DataSource = table;
Popularity: 27% [?]

silence…(1) 21:24:59
我就搞不懂了,既然是webbrowser方式填表,那填上去的原始密码数值和键盘手输入的原始密码数值难道不同么?
TOM.com<1> 21:25:08
有淘宝的控件加密算法?
Blue Eyes(1) 21:25:07
vb 我几乎看不懂
Blue Eyes(1) 21:25:23
tb tokn 这个?
阅读全文…
Popularity: 14% [?]
问题环境:
现在有一个textbox输入框,一个btn_OK按钮,一个btn_Cancle 按钮。我需要在textbox里面输入一段内容,然后按btn_OK提交。现在我想达到内容输入完毕后按回车直接提交。
问题分析:
通常情况下,输完内容之后需要鼠标点击btn_OK或者使用tab键把焦点切换到按钮上,然后再按回车提交。这样就有点小麻烦。
问题解决:
解决方法应该有几种,第一是在textbox的事件里面写一个与btn_OK事件的等效代码。这个也有点麻烦,有人说可以直接设置textbox和btn_OK的tabindex值一样,我在vs2008下测试发现不行,焦点只能在一个控件上。第二种解决方法最简单,就是将窗体的AcceptButton属性设置为btn_OK按钮。这样btn_OK按钮会一直处于获取焦点状态(如下图)。
阅读全文…
Popularity: unranked [?]
互联网真是个好东西,需要什么有什么,哈哈。今天看到一个邮箱注册软件注册的时候可以将文字的拼音也记录下来,于是百度了一下“C# 汉字 拼音”,找到下面这段代码,收藏一下,需要的时候再来试试。
因为是静态函数,调用方法很简单:CrazyCoderPinyin.Convert("张筱祥");
代码如下:
阅读全文…
Popularity: unranked [?]
1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答 . private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
2 .列举ASP.NET 页面之间传递值的几种方式。
答. 1.使用QueryString, 如….?id=1; response. Redirect()….
2.使用Session变量
3.使用Server.Transfer
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34…… 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i – 2);
}
}
阅读全文…
Popularity: unranked [?]
今天需要用到这个,于是百度了一下。从百度知道找到了答案,效果很满意。
问:鼠标在窗口的任意位置按下,即可把窗口拖动到其它位置。通常标准的Windows窗口只有在标题栏上按下鼠标才可以拖动,那么如何实现窗口的任意位置都可以拖动呢?
答:
响应窗口的MouseDown和MouseMove消息
- private Point offset;
-
- private void Form1_MouseDown(object sender, MouseEventArgs e)
- {
- if (MouseButtons.Left != e.Button) return;
-
- Point cur = this.PointToScreen(e.Location);
- offset = new Point(cur.X – this.Left, cur.Y – this.Top);
- }
-
- private void Form1_MouseMove(object sender, MouseEventArgs e)
- {
- if (MouseButtons.Left != e.Button) return;
-
- Point cur = MousePosition;
- this.Location = new Point(cur.X – offset.X, cur.Y – offset.Y);
- }
阅读全文…
Popularity: unranked [?]
昨天晚上,看csdn上一个人的博客,写的文章都挺好的,列举了他的部分作品以及部分源码截图。其中看到一句很好的代码,至少我认为很好。
他是这么写的:
Code
- ShowLog("账户密码错误!请修改密码重试!");
具体的ShowLog方法的代码在他文中并没有写出来,但是我也差不多能猜出其中的代码了。主要就是显示一些提示信息。
阅读全文…
Popularity: unranked [?]
最新评论