C#怎么判断BeginInvoke 的mysql存储过程抛异常是否抛错?

c# BeginInvoke 出错,该怎么处理_读书人
c# BeginInvoke 出错,该怎么处理
&来源:读书人网&【读书人网():综合教育门户网站】
c# BeginInvoke 出错之前一直都是以这种方式处理跨线程更新UI的。但是今天我在新建的线程中要用BeginInvoke
c# BeginInvoke 出错之前一直都是以这种方式处理跨线程更新UI的。但是今天我在新建的线程中要用BeginInvoke来处理UI线程中的更新时,却总是报错。代码如下: & BeginInvoke(new Action(() =& & { & FolderSmallView(_folderList); & FileSmallView(_currentPlayLessonList); & })); 执行的FolderSmallView(_folderList);和FileSmallView(_currentPlayLessonList);就是需要更新UI。错误:使用泛型 类型& System.Action&T&& 需要&1&个类型实参。请高手指点,谢谢。[解决办法]参数定义不正确[解决办法]没必要用 new Action( ... ) 呀。直接BeginInvoke(() =& { FolderSmallView(_folderList); FileSmallView(_currentPlayLessonList); });[解决办法]Action action = () =&{ FolderSmallView(_folderList);&
FileSmallView(_currentPlayLessonList);};BeginInvoke(action);[解决办法]begininvoke 需要外部传递参数,或者有设置参数的函数您的位置: >
C#中BeginInvoke与EndInvoke
学习标签:
本文导读:C#中BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕。
普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了。
异步方法很好的解决了这些问题,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了。
异步调用并不是要减少线程的开销, 它的主要目的是让调用方法的主线程不需要同步等待在这个函数调用上, 从而可以让主线程继续执行它下面的代码.
在C#中使用线程的方法很多,使用委托的BeginInvoke和EndInvoke方法就是其中之一。BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。
一、BeginInvoke方法
用于启动异步调用
public IAsyncResult BeginInvoke(&输入和输出变量&,回调函数callback , 附加信息AsyncState)
2、函数返回值类型
public interface IAsyncResult
object AsyncState...{ get;}
//如果有回调函数的话该参数用于保存要传递给回调函数的参数值
WaitHandle AsyncWaitHandle...{ get;}
bool CompletedSynchronously...{ get;}
bool IsCompleted...{ get;} //保存方法是否执行结束,我们可以通过该属性的值来判断异步方法是否执行结束
(1).BeginInvoke返回IasyncResult,可用于监视调用进度。
(2).结果对象IAsyncResult是从开始操作返回的,并且可用于获取有关异步开始操作是否已完成的状态。
(3).结果对象被传递到结束操作,该操作返回调用的最终返回值。
(4).在开始操作中可以提供可选的回调。如果提供回调,在调用结束后,将调用该回调;并且回调中的代码可以调用结束操作。
(5).如果需要将一些额外的信息传送给回调函数,就将其放入BeginInvoke()方法的第3个参数asyncState中。注意到这个参数的类型为Object,所以可以放置任意类型的数据。如果有多个信息需要传送给回调函数,可以将所有要传送的信息封状到一个Struct变量,或者干脆再定义一个类,将信息封装到这个类所创建的对象中,再传送给BeginInvoke()方法。
二、EndInvoke方法
用于检索异步调用结果
public &方法返回值类型&EndInvoke(&声明为ref或out的参数&, IAsyncResult result )
(1).result参数由BeginInvoke()方法传回。.NET借此以了解方法调用是否完成。
(2).当EndInvoke方法发现异步调用完成时,它取出此异步调用方法的返回值作为其返回值,如果异步调用方法有声明为ref和out的参数,它也负责填充它。
(3).在调用BeginInvoke后可随时调用EndInvoke方法,注意:始终在异步调用完成后调用EndInvoke。
(4).如果异步调用未完成,EndInvoke将一直阻塞到异步调用完成。
(5).EndInvoke的参数包括需要异步执行的方法的out和ref参数以及由BeginInvoke返回的IAsyncResult。 &
三、BeginInvoke与EndInvoke实例
1、直接使用EndInvoke方法来获得返回值
当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕。如下面的代码所示:
C# 代码 &&复制
using System.Collections.G
using System.L
using System.T
using System.T
namespace ConsoleApplication1
class Program
private static int newTask(int ms)
Console.WriteLine(&任务开始&);
Thread.Sleep(ms);
Random random = new Random();
int n = random.Next(<span style="color: #000);
Console.WriteLine(&任务完成&);
private delegate int NewTaskDelegate(int ms);
static void Main(string[] args)
NewTaskDelegate task = newT
IAsyncResult asyncResult = task.BeginInvoke(<span style="color: #00, null, null);
// EndInvoke方法将被阻塞2秒
int result = task.EndInvoke(asyncResult);
Console.WriteLine(result);
(1)、在运行上面的程序后,由于newTask方法通过Sleep延迟了2秒,因此,程序直到2秒后才输出最终结果(一个随机整数)。
(2)、如果不调用EndInvoke方法,程序会立即退出,这是由于使用BeginInvoke创建的线程都是后台线程,这种线程一但所有的前台线程都退出后(其中主线程就是一个前台线程),不管后台线程是否执行完毕,都会结束线程,并退出程序。
2、使用轮询等待异步调用完成:使用IAsyncResult的IsCompleted属性来判断异步调用是否完成
当调用EndInvoke方法获得调用结果时,整个程序就象死了一样,依然要等待异步方法执行结束,这样做用户的感觉并不会太好,因此,我们可以使用 asyncResult来判断异步调用是否完成,并显示一些提示信息。这样做可以增加用户体验。
C# 代码 &&复制
using System.Collections.G
using System.T
using System.IO;
namespace AsyncCalculateFolderSize2
class Program
//计算指定文件夹的总容量
private static long CalculateFolderSize(string FolderName)
if (Directory.Exists(FolderName) == false)
throw new DirectoryNotFoundException(&文件夹不存在&);
DirectoryInfo RootDir = new DirectoryInfo(FolderName);
//获取所有的子文件夹
DirectoryInfo[] ChildDirs = RootDir.GetDirectories();
//获取当前文件夹中的所有文件
FileInfo[] files = RootDir.GetFiles();
long totalSize = <span style="color: #;
//累加每个文件的大小
foreach (FileInfo file in files)
totalSize += file.L
//对每个文件夹执行同样的计算过程:累加其下每个文件的大小
//这是通过递归调用实现的
foreach (DirectoryInfo dir in ChildDirs)
totalSize += CalculateFolderSize(dir.FullName);
//返回文件夹的总容量
return totalS
//定义一个委托
public delegate long CalculateFolderSizeDelegate(string FolderName);
static void Main(string[] args)
//定义一个委托变量引用静态方法CalculateFolderSize
CalculateFolderSizeDelegate d = CalculateFolderS
Console.WriteLine(&请输入文件夹名称(例如:C:\\\\Windows):&);
string FolderName = Console.ReadLine();
//通过委托异步调用静态方法CalculateFolderSize
IAsyncResult ret = d.BeginInvoke(FolderName, null, null);
Console.Write (&正在计算中,请耐心等待&);
//每隔2秒检查一次,输出一个&.&
while (ret.IsCompleted == false)
Console.Write(&.&);
System.Threading.Thread.Sleep(<span style="color: #0);
//阻塞,等到调用完成,取出结果
long size = d.EndInvoke(ret);
Console.WriteLine(&\\n计算完成!\\n文件夹{0}的容量为:{1}字节&, FolderName, size);
3、使用轮询等待异步调用完成:使用IAsyncResult的AsyncWaitHandle.WaitOne
C# 代码 &&复制
using System.Collections.G
using System.L
using System.T
using System.IO;
namespace AsyncCalculateFolderSize3
class Program
//计算指定文件夹的总容量
private static long CalculateFolderSize(string FolderName)
if (Directory.Exists(FolderName) == false)
throw new DirectoryNotFoundException(&文件夹不存在&);
DirectoryInfo RootDir = new DirectoryInfo(FolderName);
//获取所有的子文件夹
DirectoryInfo[] ChildDirs = RootDir.GetDirectories();
//获取当前文件夹中的所有文件
FileInfo[] files = RootDir.GetFiles();
long totalSize = <span style="color: #;
//累加每个文件的大小
foreach (FileInfo file in files)
totalSize += file.L
//对每个文件夹执行同样的计算过程:累加其下每个文件的大小
//这是通过递归调用实现的
foreach (DirectoryInfo dir in ChildDirs)
totalSize += CalculateFolderSize(dir.FullName);
//返回文件夹的总容量
return totalS
//定义一个委托
public delegate long CalculateFolderSizeDelegate(string FolderName);
static void Main(string[] args)
//定义一个委托变量引用静态方法CalculateFolderSize
CalculateFolderSizeDelegate d = CalculateFolderS
Console.WriteLine(&请输入文件夹名称(例如:C:\\\\Windows):&);
string FolderName = Console.ReadLine();
//通过委托异步调用静态方法CalculateFolderSize
IAsyncResult ret = d.BeginInvoke(FolderName, null, null);
Console.Write(&正在计算中,请耐心等待&);
while(!ret.AsyncWaitHandle.WaitOne(<span style="color: #00))
//等待2秒钟,输出一个&.&
Console.Write(&.&);
//阻塞,等到调用完成,取出结果
long size = d.EndInvoke(ret);
Console.WriteLine(&\\n计算完成。文件夹{0}的容量为:{1}字节\\n&, FolderName, size);
WaitOne的第一个参数表示要等待的毫秒数,在指定时间之内,WaitOne方法将一直等待,直到异步调用完成,并发出通知,WaitOne方法才返回true。当等待指定时间之后,异步调用仍未完成,WaitOne方法返回false,如果指定时间为0,表示不等待,如果为-1,表示永远等待,直到异步调用完成。
4、使用回调方式返回结果
要想在调用的过程中,程序仍然可以正常做其它的工作,就必须使用异步调用的方式。
C# 代码 &&复制
private delegate int MyMethod();
private int method()
Thread.Sleep(<span style="color: #000);
return <span style="color: #0;
private void MethodCompleted(IAsyncResult asyncResult)
if (asyncResult == null) return;
textBox1.Text = (asyncResult.AsyncState as
MyMethod).EndInvoke(asyncResult).ToString();
private void button1_Click(object sender, EventArgs e)
MyMethod my =
IAsyncResult asyncResult = my.BeginInvoke(MethodCompleted, my);
这里使用了BeginInvoke方法的最后两个参数(如果被调用的方法含有参数的话,这些参数将作为BeginInvoke的前面一部分参数,如果没有参数,BeginInvoke就只有两个参数了)。
第一个参数是回调方法委托类型,这个委托只有一个参数,就是IAsyncResult,如MethodCompleted方法所示。当method方法执行完后,系统会自动调用MethodCompleted方法。
BeginInvoke的第二个参数需要向MethodCompleted方法中传递一些值,一般可以传递被调用方法的委托,如上面代码中的my。这个值可以使用IAsyncResult.AsyncState属性获得。
四、BeginInvoke与EndInvoke完整实例
C# 代码 &&复制
using System.Collections.G
using System.L
using System.T
using System.T
namespace ConsoleApplication1
public delegate void AsynComputeCaller(int num, out int result);
class Factorial
public int Compute(int num)
Thread.Sleep(new Random().Next(<span style="color: #0,<span style="color: #9));
if (num == <span style="color: #) return <span style="color: #;
return num * this.Compute(num - <span style="color: #);
/**//// &summary&
/// 异步计算阶乘
/// &/summary&
/// &param name=&num&&&/param&
/// &param name=&result&&&/param&
public void AsynCompute(int num, out int result)
Console.WriteLine(&\\n
AsynCompute...start&);
DateTime startTime = DateTime.N
result = this.Compute(num);
DateTime endTime = DateTime.N
Console.WriteLine(&\\n
AsynCompute...end(Milliseconds Used:{0})&,
endTime.Subtract(startTime).Milliseconds);
class Program
int result = <span style="color: #;
/**//// &summary&
/// 调用BeginInvoke方法启动异步方法,
/// 进行某些操作,
/// 然后调用EndInvoke方法来一直阻止请求线程到调用完成。
/// &/summary&
void Run()
Factorial f = new Factorial();
AsynComputeCaller caller = new AsynComputeCaller(f.AsynCompute);
Console.WriteLine(&Run...start&);
IAsyncResult iAsyncResult = caller.BeginInvoke(<span style="color: #, out result, null, null);
//主线程进行一些操作
Console.WriteLine(&
主线程进行一些操作&);
for (int i = <span style="color: #; i & <span style="color: #; i++)
Thread.Sleep(<span style="color: #);
Console.Write(&.&);
Console.WriteLine();
//调用EndInvoke来等待异步调用结束,并获得结果
caller.EndInvoke(out result, iAsyncResult);
Console.Write(&Run...end(result:{0})&, result);
/**//// &summary&
/// 调用BeginInvoke方法启动异步方法,
/// 使用System.IAsyncResult.AsyncWaitHandle属性获取WaitHandle,
/// 使用它的WaitOne方法一直阻止执行直到发出WaitHandle信号,
/// 然后调用EndInvoke方法。
/// &/summary&
void Run2()
Factorial f = new Factorial();
AsynComputeCaller caller = new AsynComputeCaller(f.AsynCompute);
Console.WriteLine(&Run...start&);
IAsyncResult iAsyncResult = caller.BeginInvoke(<span style="color: #, out result, null, null);
//主线程进行一些操作
Console.WriteLine(&
主线程进行一些操作&);
for (int i = <span style="color: #; i & <span style="color: #; i++)
Thread.Sleep(<span style="color: #);
Console.Write(&.&);
Console.WriteLine();
Console.WriteLine(&
等待WaitHandle接收到信号&);
//等待WaitHandle接收到信号
iAsyncResult.AsyncWaitHandle.WaitOne();
caller.EndInvoke(out result, iAsyncResult);
Console.Write(&Run...end(result:{0})&, result);
/**//// &summary&
/// 调用BeginInvoke方法启动异步方法,
/// 轮询由BeginInvoke返回的IAsyncResult,
/// 确定异步调用何时完成,
/// 然后调用EndInvoke。
/// &/summary&
void Run3()
Factorial f = new Factorial();
AsynComputeCaller caller = new AsynComputeCaller(f.AsynCompute);
Console.WriteLine(&Run...start&);
IAsyncResult iAsyncResult = caller.BeginInvoke(<span style="color: #, out result, null, null);
//主线程进行一些操作
Console.WriteLine(&
主线程进行一些操作&);
while(!iAsyncResult.IsCompleted)
Thread.Sleep(<span style="color: #0);
Console.Write(&.&);
Console.WriteLine();
Console.WriteLine(&
异步方法已经结束&);
//等待WaitHandle接收到信号
iAsyncResult.AsyncWaitHandle.WaitOne();
caller.EndInvoke(out result, iAsyncResult);
Console.Write(&Run...end(result:{0})&, result);
/**//// &summary&
/// 调用BeginInvoke方法启动异步方法时,
/// 将代表异步方法完成时需要回调的方法的委托传递给BeginInvoke。
/// 异步调用完成后,将在ThreadPool线程上执行该回调方法。
/// 在该回调方法中调用EndInvoke。
/// &/summary&
void Run4()
Factorial f = new Factorial();
AsynComputeCaller caller = new AsynComputeCaller(f.AsynCompute);
Console.WriteLine(&Run...start&);
IAsyncResult iAsyncResult = caller.BeginInvoke(<span style="color: #, out result,
new AsyncCallback(CallbackMethod), caller);
//主线程进行一些操作
Console.WriteLine(&
主线程进行一些操作&);
for (int i = <span style="color: #; i & <span style="color: #; i++)
Thread.Sleep(<span style="color: #);
Console.Write(&.&);
Console.WriteLine();
void CallbackMethod(IAsyncResult ar)
AsynComputeCaller caller = (AsynComputeCaller)ar.AsyncS
caller.EndInvoke(out result, ar);
Console.Write(&Run...end(result:{0})&, result);
static void Main(string[] args)
Program p = new Program();
Console.WriteLine(&\\n\\n*** Run ***&);
Console.WriteLine(&\\n\\n*** Run2 ***&);
Console.WriteLine(&\\n\\n*** Run3 ***&);
Console.WriteLine(&\\n\\n*** Run4 ***&);
Console.Read();
五、BeginInvoke与Invoke的区别
1、Invoke() 调用时,会阻塞当前线程,等到 Invoke() 方法返回才继续执行后面的代码,表现出&同步&的概念。
2、BeginInvoke() 调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码,表现出&异步&的概念。
3、EndInvoke() ,在想获取 BeginInvoke() 执行完毕后的结果时,调用此方法来获取。
您可能感兴趣
一月好评排行榜BeginInvoke和EndInvoke方法学习小结 - 木子屋
BeginInvoke和EndInvoke方法学习小结
编辑:dnawo 日期:
BeginInvoke和EndInvoke的作用是把一个同步方法改成异步执行,改造过程主要有3步:·增加一个与方法对应的委托;·增加一个AsyncCallback委托类型的回调函数(在函数体调用EndInvoke获取返回值);·将方法的参数、回调函数和委托变量传给BeginInvoke;下面是一个简单的示例: 程序代码public class Test{&&&&/// &summary&&&&&/// 原始方法&&&&/// &/summary&&&&&/// &returns&&/returns&&&&&private int Todo()&&&&{&&&&&&&&return 100;&&&&}&&&&/// &summary&&&&&/// 增加方法对应的委托&&&&/// &/summary&&&&&/// &returns&&/returns&&&&&delegate int TodoHandler();&&&&/// &summary&&&&&/// 增加AsyncCallback委托类型的回调函数&&&&/// &/summary&&&&&/// &param name="ar"&&/param&&&&&private void TodoCallback(IAsyncResult ar)&&&&{&&&&&&&&TodoHandler handler = (TodoHandler)ar.AsyncS&&&&&&&&Console.WriteLine(handler.EndInvoke(ar));&&&&}&&&&/// &summary&&&&&/// 调用示例&&&&/// &/summary&&&&&public void InvokeTest()&&&&{&&&&&&&&TodoHandler handler = new TodoHandler(Todo);&&&&&&&&handler.BeginInvoke(TodoCallback, handler);&&&&}&&&&&&&&}参考很多类异步方法命名方式BeginXXX和EndXXX,对上面类稍做修改: 程序代码public class Test{&&&&public int Todo(int a, int b)&&&&{&&&&&&&&return a +&&&&}&&&&private delegate int TodoHandler(int a, int b);&&&&private TodoHandler _todo =&&&&public Test()&&&&{&&&&&&&&_todo = T&&&&}&&&&public IAsyncResult BeginTodo(int a, int b, AsyncCallback callback, object state)&&&&{&&&&&&&&return _todo.BeginInvoke(a, b, callback, state);&&&&}&&&&public int EndTodo(IAsyncResult ar)&&&&{&&&&&&&&return _todo.EndInvoke(ar);&&&&}}public class Program{&&&&static void TodoCallback(IAsyncResult ar)&&&&{&&&&&&&&Test test = (Test)ar.AsyncS&&&&&&&&Console.WriteLine(test.EndTodo(ar));&&&&}&&&&static public void Main(string[] args)&&&&{&&&&&&&&Test test = new Test();&&&&&&&&test.BeginTodo(2, 3, TodoCallback, test);&&&&&&&&Console.ReadKey();&&&&}}BeginTodo方法返回类型为IAsyncResult,网上看到有人这么调用: 程序代码static public void Main(string[] args){&&&&Test test = new Test();&&&&IAsyncResult result = test.BeginTodo(2, 3, null, null);&&&&Console.WriteLine(test.EndTodo(result));&&&&Console.ReadKey();}
上一篇: 下一篇:
评论: 0 | 引用: 0 | 查看次数: 1056
请后再发表评论!
2017年6月日一二三四五六c# Invoke和 BeginInvoke的區別
,在SerialPort 中使用方式
vs中有一个控件SerialPort ,可以实现串口信息的收发,一般我们对于在串口收到的信息只是做读取,不会在其中加入function或者其他操作,可是如果让你加入一个变量or function,你怎么辦?要知道SerialPort 的DataReceive 是运行在辅助线程上面的,这里就要用到Invoke\BeginInvoke,下面我们分情况讨论:
首先大家先了解一下Invoke\BeginInvoke,给大家一个链接http:/blog/static//,介绍的很好;
弄明白了Invoke\BeginInvoke的不同之后,我们开始看代码:
Open SerialPort 操作
private void buttonOpenCloseSerialPort_Click(object sender, EventArgs e)
//设置好端口,波特率
comm.PortName = comboPortName.T
comm.BaudRate = int.Parse(comboBaudrate.Text);
{comm.Open();}
catch(Exception ex)
{//捕获到异常信息,创建一个新的comm对象,之前的不能用了。
comm = new SerialPort();
//现实异常信息给客户。
MessageBox.Show(ex.Message);
Thread.Sleep(1);
Function_A()//是否需要Function_B的结果
DataReceived 操作
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
if (PClosing)
//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
int n = comm.BytesToR
byte[] buf = new byte[n];
received_count +=
comm.Read(buf, 0, n);
builder.Clear();
//因为要访问UI资源,需要使用invoke方式同步UI。
//因为要访问UI资源,需要使用Begininvoke方式异步UI。
this.Invoke((EventHandler)(delegate
{// 判断是否是显示为16进制
if (checkBoxHexView.Checked)
{//依次的拼接出16进制字符串
foreach (byte b in buf)
{builder.Append(b.ToString("X2") + " ");}
//直接按ASCII规则转换成字符串
builder.Append(Encoding.ASCII.GetString(buf));
//追加的形式添加到文本框末端,并滚动到最后。
this.richTextBox.AppendText(builder.ToString());
}Function_B() &// 注意,Function_B是在辅助线程上实现,当采用Invoke时,会被阻塞;采用BeginInvoke会直接执行,所以当Function_A想要调 & & & & 用Function_B的结果时,我们需要Sleep()并且采用BeginInvoke
Function_A() // UI主线程
Function_B() // 辅助线程
更多相关文章
转自/c2303191/articles/82
PCDATA PCDATA 的意思是被解析的字符数据(parsed character data).可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本.PCDATA 是会被解析器解析的文本.这些文本将被解
转:表单中Readonly和Disabled的区别 参考资料: disabled和readonly区别: 参考博文1地址:http://blog.csdn.net/symgdwyh/article/details/5
Schema和DTD 都是用来定义各种文件中XML标记的使用规范.Schema是标准的XML文件,而DTD则使用自己的特殊语法,因此,只需要知道XML的语法规则就可以编写Schema了,不需要再学习其它语法规则.可以使用相同的处理器来解读,Schema利用命名空间将文件中特殊的节点与Schema说明
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws NullPointerException{} public int method(int[] arr
如果只是直接使用子线程访问UI控件,直接看内容三,如果想深入了解从内容一看起.
一.Control.Invoke和BeginInvoke方法的区别 先上总结: Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托.但委托的内容在UI线程上执 ...
[同步]Invoke Application.Current.Dispatcher.Inv
转自:Control的Invoke和BeginInvoke
作者:Kuffy Wang 近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下.感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 .(一)Control的Invoke和B
找到了一个linux下ping 一IP地址段内网络连通性的脚本. 假如脚本名称为pingip.sh 使用方式为: #./pingip.sh 1 255 表示ping 192.168.0.1----255段内的设备.
本章开始分析过滤器,根据API的顺序来 主要涉及的知识点 jQuery的组成 pushSt
在android中使用listview时需要了解listview加载数据的原理
网上已有很多关于ios本地化的博客和资料,由于部分原作者使用的Xcode版本较早
一.单独抓取文件中ip地址,文件内容是 Mar 31 0 drserver2 spamdyke[27749]: ALLOWED from:
最近在AIO 6.1与SF环境中遇到了AIO的问题,下面是MOS中关于AIO 在6.1下的
转自:.cn/s/blog_ ...
1. 你让我滚,我滚了.你让我回来,对不起,滚远了 2. 流氓不可怕,就怕流氓有文化-- 3. 走牛B的路,让傻B去说吧! 4. 开车无难事,只怕有新人! 5. 矿难在检讨中继续,楼价在控制中上升 6. XP不发威,
web应用从单点向高并发架构演变时往往遇到最大的问题就是数据库的分布式存储.因为web应用
return是一个关键字,返回函数值:exit()是一个函数: return是语言级的:exit()是操作系统提供的函数: return表示函数退出:exit()表示进程退出: 非主函数中调用return和exit效

我要回帖

更多关于 mysql存储过程抛异常 的文章

 

随机推荐