技巧杂项

来源:互联网 发布:bim管廊管线优化 编辑:程序博客网 时间:2024/05/01 06:37

 

压缩 :
using System.IO;
using System.IO.Compression;
………………………………………
        
public byte[] Zip(byte[] byteArray)   //压缩方法
        {
               MemoryStream memoryStream 
= new MemoryStream();
               DeflateStream deflateStream 
= new DeflateStream(memoryStream, CompressionMode.Compress,false);
               deflateStream.Write(byteArray, 
0, byteArray.Length);
               deflateStream.Close();
               
return memoryStream.ToArray();
        }


        
public byte[] Dezip(byte[] byteArray)   //解压缩方法
        {
            MemoryStream memoryStream 
= new MemoryStream(byteArray); 

             
这节主要是要获取解压后的大小, 要改进

            
byte[] dezipArray = new byte[i];             
            memoryStream.Position 
= 0;  //将流的位置重新移到开始位置
            DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Decompress, false);            
            
            deflateStream.Read(dezipArray, 
0, dezipArray.Length);         

            deflateStream.Close();
            
return dezipArray;
        }



        
private void button1_Click(object sender, EventArgs e)
        
{
            OpenFileDialog openFileDialog 
= new OpenFileDialog();
            openFileDialog.ShowDialog();
            openFileDialog.Multiselect 
= false;
            
if (!string.IsNullOrEmpty(openFileDialog.FileName))
            
{         
                
//下面可改为取出已压缩好的字节数组解压缩之后,保存;       
                byte[] byteArray =File.ReadAllBytes(openFileDialog.FileName);

                
byte[] zipByte=Zip(byteArray);

                
byte[] deZipByte=Dezip(zipByte); 
                MessageBox.Show(
"compression before: " + (byteArray.Length / 1024).ToString() + " " + "compression after: " + (tempByte.Length / 1024).ToString()+" "
                                 
+ "Decompression after: " + (detempByte.Length/1024).ToString());
                File.WriteAllBytes(
@"c:a.zip", zipByte); //保存压缩后的文件
                File.WriteAllBytes(@"c:a.xlt", deZipByte); //保存解压缩后的文件                
            }
           
        }




线程调用和绘图:
在创建托管的线程时,在该线程上执行的方法将通过一个传递给 Thread 构造函数的 ThreadStart 委托或 ParameterizedThreadStart 委托来表示。在调用 System.Threading.Thread.Start 方法之前,该线程不会开始执行。执行将从 ThreadStart 或 ParameterizedThreadStart 委托表示的方法的第一行开始。区别是ThreadStart执行不带参数的委托方法, ParameterizedThreadStart执行带参数的委托方法。
A. ThreadStart执行不带参数的委托方法实例:
using System.Drawing.Drawing2D;
using System.Threading;
………………………………………..
        
private void button3_Click(object sender, EventArgs e)
        
{
           
//调用线程
            Thread thread = new Thread(new ThreadStart(this.BrushRectangle));
           
//如果线程中的方法有使用到多线程,如openFileDialog.ShowDialog();则必须在线程开始前将线程设为单线程;
            thread.SetApartmentState(ApartmentState.STA); // ApartmentState.STA 单线程, ApartmentState.MTA 多线程
            thread.Start();
        }


        
public void BrushRectangle()  //绘图
        {
            
int x;
            
int y;
            
int width;
            
int height;
            Rectangle rectangle 
= new Rectangle(101045025);
            
            LinearGradientBrush rectangleBrush 
= new LinearGradientBrush(rectangle, Color.AliceBlue, Color.CornflowerBlue, LinearGradientMode.ForwardDiagonal);
            Pen rectanglePen 
= new Pen(rectangleBrush);
            Graphics g 
= this.CreateGraphics();
            x
=rectangle.X;
            y
=rectangle.Y;
            width
=rectangle.Width/100;
            height
=rectangle.Height;          
            
            
for (int i = 1; i <= 100; i++)
            
{
                g.FillRectangle(rectangleBrush, x 
* i, y, width, height);
                Thread.Sleep(
50);
            }

            MessageBox.Show(
"Ok");


            
//下面演示如何生成图片的缩略图;
           System.Drawing.Image image = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream, truetrue);
                    Bitmap myBitmap 
= new System.Drawing.Bitmap(image); 
                   Image.GetThumbnailImageAbort myCallback 
= new Image.GetThumbnailImageAbort(ThumbnailCallback);
                   Image myThumbnail 
= myBitmap.GetThumbnailImage(4040, myCallback, IntPtr.Zero);
                   Graphics g 
= this.CreateGraphics();  
g.DrawImage(myThumbnail, 
250175);
        }


B.ParameterizedThreadStart执行带参数的委托方法的实例:
using System;
using System.Threading;

public class Work
{
    
public static void Main()
    
{
        
// To start a thread using a shared thread procedure, use
        
// the class name and method name when you create the 
        
// ParameterizedThreadStart delegate.
        
//
        Thread newThread = new Thread(
            
new ParameterizedThreadStart(Work.DoWork));
        
        
// Use the overload of the Start method that has a
        
// parameter of type Object. You can create an object that
        
// contains several pieces of data, or you can pass any 
        
// reference type or value type. The following code passes
        
// the integer value 42.
        
//
        newThread.Start(42);

        
// To start a thread using an instance method for the thread 
        
// procedure, use the instance variable and method name when 
        
// you create the ParameterizedThreadStart delegate.
        
//
        Work w = new Work();
        newThread 
= new Thread(
            
new ParameterizedThreadStart(w.DoMoreWork));
        
        
// Pass an object containing data for the thread.
        
//
        newThread.Start("The answer.");
    }

 
    
public static void DoWork(object data)
    
{
        Console.WriteLine(
"Static thread procedure. Data='{0}'",data);
    }


    
public void DoMoreWork(object data)
    
{
        Console.WriteLine(
"Instance thread procedure. Data='{0}'",data);
    }

}


/* This code example produces the following output (the order 
   of the lines might vary):

Static thread procedure. Data='42'
Instance thread procedure. Data='The answer'
*/





发送邮件:
using System.Net.Mail;
……………………

            
try
            
{
                MailAddress mailAddressFrom 
= new MailAddress("your mail address");
                MailAddress mailAddressTo 
= new MailAddress("your mail address");

                MailMessage mailMessage 
= new MailMessage(mailAddressFrom, mailAddressTo);
                mailMessage.Body 
= "This is Mail Body!";
                mailMessage.Subject 
= "This is Mail Subject!";

                
//增加附件;
                OpenFileDialog of = new OpenFileDialog();
                of.Multiselect 
= true;
                of.ShowDialog();
                
if (of.FileNames.Length >0)
                
{
                    
foreach (string filename in of.FileNames)
                    
{
                        Attachment at 
= new Attachment(filename);
                        mailMessage.Attachments.Add(at);
                    }

                }


                SmtpClient smtpClient 
= new SmtpClient("smtp name");                
                smtpClient.Credentials 
= new System.Net.NetworkCredential("username""your password");
                smtpClient.Send(mailMessage);               
                
                MessageBox.Show(
"Send Mail Successfully!");
            }

            
catch(SmtpException ex)
            
{
                
throw new Exception(ex.StatusCode.ToString());
            }


对象管理:
using System.Management;
………………………
            
//列出所有服务
            ManagementObjectSearcher searcher = new
            ManagementObjectSearcher(
"Select * from win32_service where State='Running'");
            listBox1.Items.Clear();
            
foreach (ManagementObject svc in searcher.Get())
            
{
               listBox1.Items.Add(svc[
"DisplayName"].ToString());
            }



读取系统日志:
using System.Diagnostics;
……………………..
            EventLog eventLog 
= new EventLog("Application"".");            

            
foreach (EventLogEntry eventLogEntry in eventLog.Entries)
            
{
                
if (eventLogEntry.Source == "MSSQLServer")
                
{
                    
if (eventLogEntry.EntryType == EventLogEntryType.Error ||
                        eventLogEntry.EntryType 
== EventLogEntryType.Warning)
                    
{
                        listBox1.Items.Add(eventLogEntry.Message);
                    }

                }

            }








获取网络及驱动器信息:
using System.IO;  //驱动器
using System.Net.NetworkInformation;  //网络
………………………
            listBox1.Items.Clear();
            DriveInfo[] driveInfoArrary 
= DriveInfo.GetDrives();
            
foreach (DriveInfo driveInfo in driveInfoArrary)
            
{
                listBox1.Items.Add(driveInfo.Name);
            }


            NetworkInterface[] networkInterfaceArray 
= NetworkInterface.GetAllNetworkInterfaces();
            
foreach (NetworkInterface networkInterface in networkInterfaceArray)
            
{
                listBox1.Items.Add(networkInterface.Name 
+ "{" + networkInterface.GetIPv4Statistics().BytesReceived.ToString() + "}");
            }



DLL调用:
using System.Runtime.InteropServices;
……………………………………………..
           
// CharSet=CharSet.Unicode表示传输字符的格式,不加将会出现乱码
        [DllImport("User32.dll",CharSet=CharSet.Unicode)]
        
public static extern int MessageBoxW(int h, string m, string c, int type);
         ………………………………….
        
private void button1_Click(object sender, EventArgs e)
        
{
           MessageBoxW(
0"显示消息的地方""主题"0);
        }


正则表达式调用实例:
        
private  bool IsInteger(string strNumber)
        
{
            Regex objNotIntPattern 
= new Regex("[^0-9-]");
            Regex objIntPattern 
= new Regex("^-[0-9]+$|^[0-9]+$");
            
return !objNotIntPattern.IsMatch(strNumber) &&
                    objIntPattern.IsMatch(strNumber);
        }

原创粉丝点击