MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
MVC+Spring.NET+NHibernate .NET SSH框架整合
在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及。作为一个初学者,可以感受到.NET出了MVC框架以后太灵活了(相比之前的web Form),嗯,关于.NET中的MVC框架我就不多说了,推荐这位大神的《MVC知多少系列》http://www.cnblogs.com/sheng-jie/p/6291915.html。下面进入正题,.NET中也有SSH框架,他们分别指MVC+Spring.NET和NHibernate。
其中Spring.NET是典型的IOC框架,类似的还有Autofac、Ninject等等。
NHibernate是ORM框架,类似的还有大家较为熟悉的Entity Framework。
下面,我就说下我在构建.NET中SSH框架中遇到的问题:
1.Spring.NET注入的方式主要是通过XML文件来实现的,所以每一个注入的XML文件需将文件的生成操作改为“嵌入的资源”

2.XML object节点type属性:
第一个参数为注入文件位于那个项目的那个文件夹的那个类(这里值得是自项目到注入文件的路径,用"."号相隔),例如我要实现注入的是HomeController.cs这个文件,我的项目命名空间是web,文件夹名称是Controllers,文件名是HomeController
第二个参数是注入文件所在项目的命名空间,我所注入的HomeController.cs位于Web项目,所以第二个参数为Web。


这里我只指出了我所遇到的问题,希望大家别犯我这样的错误,具体实现请参考以下博客,他们比我写的更好。第一次写技术类的随笔,如有错误,还请博友多多指出,谢谢。
http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Nhibernate_AspNetMvc.html
https://yq.aliyun.com/articles/39969
C# 委托异步 和 async /await 两种实现的异步
最近频繁使用异步所以自己综合的学习了一把异步相关的知识,自己稍加整理了一下(这也是我试着写的第一篇,如果有不对的,希望大神来指正!)
首先是 委托实现的异步
class Program
{
public delegate int weituo();//定义了个委托
public int xxx()
{
Thread.Sleep(3000);
Console.WriteLine("11111.");
return 1;
}
///定义了个方法
static void Main(string[] args)
{
weituo a =new weituo(new Program().xxx);
IAsyncResult result= a.BeginInvoke(null,null);
Console.WriteLine("1234");
Thread.Sleep(1000);
int i= a.EndInvoke(result);
Console.WriteLine("1235");
Console.WriteLine(i.ToString());
Console.ReadLine();
}
}
执行结果如下;

接着是 async /await 的异步实现
class Program
{
public static async void xxx()
{
int i = 0;
await Task.Run(() =>
{
new Program().xxxa();
});
Console.WriteLine("123");
}
public async Task<int> xxxa()
{
Thread.Sleep(3000);
Console.WriteLine("11111.");
return (2);
}
static void Main(string[] args)
{
xxx();
Console.WriteLine("1234");
Console.WriteLine("1235");
Console.ReadLine();
}
}
执行结果

如果将
public static async void xxx()
{
int i = 0;
await Task.Run(() =>
{
new Program().xxxa();
});
Console.WriteLine("123");
}
改为
public static async void xxx()
{
int i = 0;
await new Program().xxxa();
Console.WriteLine("123");
}
结果变为

说明,async与await关键字本身并不会产生多线程;
await 不会开启新的线程,当前线程会一直往下走直到遇到真正的Async方法(比如说HttpClient.GetStringAsync),这个方法的内部会用Task.Run或者Task.Factory.StartNew 去开启线程。也就是如果方法不是.NET为我们提供的Async方法,我们需要自己创建Task,才会真正的去创建线程
问题描述
在我用鼠标点击,然后弹出一个文件选择对话框前,按钮没有异常,但之后它的周围出现了一圈白线。
只有一句代码openFileDialog1.ShowDialog()。
按钮的FlatStyle属性为flat,BackgroundImage是一张PNG格式的图像。
白线出现后,点击窗体它就会消除。
解答
一个简单的办法是把按钮的FlatAppearance.BorderColor属性设置成Parent.BackColor,即它的“容器”的背景色。这会重写焦点框。MouseUp事件可以被用来设置其值,它将在新窗口出现前被引发。
Private Sub SomeButton_MouseUp(sender As Object, e As MouseEventArgs) Handles SomeButton.MouseUp
Dim ctl As Button = DirectCast(sender, Button)
ctl.FlatAppearance.BorderColor = ctl.Parent.BackColor
End Sub
使用Control.Paint事件,我们也可以更改Control.BackColor属性来重绘边框,也可以用ControlPaint类中的DrawBorder方法(比使用ButtonRenderer类简单)
Private Sub SomeButton_Paint(sender As Object, e As PaintEventArgs) Handles SomeButton.Paint
Dim ctl As Button = DirectCast(sender, Button)
ControlPaint.DrawBorder(e.Graphics, ctl.ClientRectangle, ctl.BackColor, ButtonBorderStyle.Solid)
End Sub
或者,也可以自己重绘控件的边框:
(要注意的是ClientRectangle的Width和Height必须被缩小1像素)
Private Sub SomeButton_Paint(sender As Object, e As PaintEventArgs) Handles SomeButton.Paint
Dim ctl As Control = DirectCast(sender, Control)
Dim r As Rectangle = ctl.ClientRectangle
Using pen As Pen = New Pen(ctl.BackColor, 1)
e.Graphics.DrawRectangle(pen, r.X, r.Y, r.Width - 1, r.Height - 1)
End Using
End Sub
Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
在写LINQ语句的时候,往往会看到AsEnumerable() ,AsQueryable() 和ToList()的用法,三者有何区别呢?以下是我的理解,有毛病请大家指教!
在System.Linq命名空间下,有两个静态类:
Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展;
Queryable类,针对继承了IQueryable<T>接口的集合进行扩展。
一、AsQueryable():
先说说什么是 IQueryable,AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。
1,lazy load 特性
以下是一段最常见的代码:
var products = db.Product.where(p => p.Type == "food").select(p => new { p.Id, p.Name, p.CreateTime});
注意:Select() 的返回类型为 IQueryable,为 IQueryable<T>, 语句执行后不会立刻查询数据库, 而是在迭代使用 products 时才会查数据库, 具有 lazy load 的特性, 按需查数据库可提高程序效率。
迭代时上面的代码类似于下面的 sql 语句:
select Id, Name, CreateTime from Product where Type = 'food'
对 products 再次使用数据库查询操作, 运行时会把结果合并为1条 sql 语句, 如下,
var products = db.Product.where(p => p.Type == "food").select(p => new { p.Id, p.Name, p.CreateTime});
迭代时生成的 sql 语句类似:
select Id, Name, CreateTime from Product where Type = 'food' order by CreateTime
IQueryable 有诸多限制, 只支持数据库查询语法, 无法支持 Linq to object 的操作, 是LINQ TO SQL。
结论:AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。
同样支持 lazy load,是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例如调用:First, Single, ToList....的时候)才执行。 但不要滥用。迭代时遇到 AsEnumerable() 会先进行 sql 查询, 但是, 千万不要为了方便而滥用 AsEnumerable(), 可能会严重消耗资源,能进行 Linq to object 操作。
上面的代码在查询时会把整个Product表的结果存放进内存, 然后进行 .Select 查询,严重消耗资源。
结论:AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。
IQueryable接口与IEnumberable接口的区别:
调用 ToList() 会立刻查询并保存结果, 而不会等到迭代时才查询,作用和 lazy load 是相反的。
在需要得到完整结果后, 再处理的场景, 需要使用 ToList()。
MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法的更多相关文章
- Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法:在写LINQ语句的时候,往往会看到AsEnumerable() ,AsQueryable() 和T ...
- MVC+Spring.NET+NHibernate .NET SSH框架整合
在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MVC框架以后太灵活了(相比之前的web Form),嗯,关于.NET中的MVC框架我 ...
- spring+springMvc+struts的SSH框架整合
1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8" ...
- Spring+Hibernate+Struts(SSH)框架整合
SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...
- [转]ASP.NET MVC Spring.NET NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- ASP.NET MVC Spring.NET NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- ssh框架整合之登录以及增删改查
1.首先阐述一下我用得开发工具,myeclipse2017+oracle,所以我的基本配置步骤可能不一样,下面我用几张图来详解我的开发步骤. ---1先配置structs (Target 选择apac ...
- SSH框架整合的其它方式
--------------------siwuxie095 SSH 框架整合的其它方式 1.主要是整合 Spring 框架和 Hibernate 框架时,可以不写 Hibernate 核心配置文件: ...
随机推荐
- Objective-C 简介
很少有人会想到 Objective-C 历史悠久,并且它实际上影响了很多其他的编程技术.比如, Java 编程语言和 Objective-C 就有很多共同点.原因就是在 Objective-C 的早期 ...
- Timer 与 TimerTask 示例
, 1000);// 1秒后执行 然后每隔1秒 执行一次 ); ); timer.cancel();//停止任务(程序停止) } } /** * 启动刷新滚动数据的定时器 */public void ...
- Office WPS如何在页眉页脚添加一条横线
点击样式,页眉,修改 然后设置格式,可以添加一条或者两条横线,也可以设置不同的线型 最后效果如下图所示
- 报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
用Eclipse创建jsp页面时,提示这个错误 解决的方法是:右键项目,Build Path->Configure Build Path Add Library Server Runtime,这 ...
- 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
- Excel常用快捷键大全
一.关于处理工作表的快捷键总结 1.插入新工作表 Shift+F11或Alt+Shift+F1 2.移动到工作簿中的下一张工作表 Ctrl+PageDown 3.移动到工作簿中的上一张工作表 Ctrl ...
- 在CentOS7(虚拟机)下通过源码安装Postgresql10以及基本配置
操作系统:CentOS7 安装文件:postgresql-10.0.tar.gz 系统环境:gcc.Python 1:源码安装 [postgres@localhost ~]# tar zxvf pos ...
- sublime text 3中文乱码问题解决的方法
一.首先要确保本机sublime已经有安装包管理器,假设没有.安装方法:http://blog.chinaunix.net/uid-12014716-id-4269991.html 文中的第一步:安装 ...
- 【Zookeeper】源码分析之持久化(三)之FileTxnSnapLog
一.前言 前面分析了FileSnap,接着继续分析FileTxnSnapLog源码,其封装了TxnLog和SnapShot,其在持久化过程中是一个帮助类. 二.FileTxnSnapLog源码分析 2 ...