极品分享

C# WPF 知识要点,工程项目中应用总结!

1、立刻关闭整个应用程序,不会等待当前进程结束,相当于任务管理器里直接关闭进程

System.Environment.Exit(0);

2、WPF打开浏览器并跳转要固定URL

Process proc = new System.Diagnostics.Process();  
proc.StartInfo.FileName = "http://www.baidu.com";  
proc.Start();  

3、winform Session 保持网站登录状态

  // JObject javascript = null;  
 
  //username=test&password=fantao  
  string postData = "username=" +DataUserInfo.name + "&password=" + DataUserInfo.password;//POST参数和值写入POSTDATE里  
  byte[] byteArray = Encoding.Default.GetBytes(postData);  
  string url = "http://baidut.com/getservers?"; //POST到网站  
  HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));  
  webRequest.Method = "POST";  
  webRequest.ContentType = "application/x-www-form-urlencoded";  
  webRequest.ContentLength = byteArray.Length;  
 
  webRequest.CookieContainer = DataUserInfo.myCookie;  
 
  //   CookieContainer cookie = webRequest.CookieContainer;//如果用不到Cookie,删去即可    
  Stream newStream = webRequest.GetRequestStream();  
  newStream.Write(byteArray, 0, byteArray.Length);  
  newStream.Close();  
 
 
 
  //接收返回信息:  
 
  HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();  
  // WebHeaderCollection myWebHeaderCollection =response.Headers;//获取session  
  StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.Default);  
 
  // string sl = response.Headers.Get("Set-Cookie");  
 
  string Message = php.ReadToEnd();  
 
 // javascript = (JObject)JsonConvert.DeserializeObject(Message);  
 
 // if (javascript["status"].ToString() == "n")  
//   {  
 
 
  //    string s = javascript["info"].ToString();//反回错误信息  
 
//   }  


4、HashTable的取值和键的方法

//HtServerVSName是HashTable  

foreach (DictionaryEntry de in HtServerVSName)

{  

string sed = de.Key.ToString();  

string seds = de.Value.ToString();  

}  



5、操作DataSet中的DataTable

DataTable dt = new DataTable("MyDt");  
DataSet ds = new DataSet("MyDs");  
ds.Tables.Add(dt);//把表添加到库里,怎么样,简单吧,呵呵  
//ds.Tables["MyDt"].Rows[2]["name"] = "语文";//给table中的某个字段的某个记录赋值  
//ds.Tables["MyDt"]就找到表了  

if (ds.Tables.Contains("MyDt"))  
{  
foreach (DataRow tempRow in ds.Tables["MyDt"].Rows)  
{  
   if ("ip" == tempRow["Server"].ToString())  
   {  
      //遍历取数据  
   }  
   
}  
}  

6、用内存共享 进行进程间通信,方便快捷。

可实现单 一程序启动,并且打开已启动的程序和托盘操作


7、WPF带选择按钮的messagebox

ButtonBase button = this.Template.FindName("PART_CloseButton", this) as ButtonBase;  
if (button != null)  
{  
button.Click += delegate//匿名委托  
{  
 MessageBoxResult dr = MessageBox.Show("您正在删除该服务器条目!\n\n确定要删除该服务器条目吗?", "提示", MessageBoxButton.OKCancel);  

 if (dr == MessageBoxResult.OK)  
 {  
     // get the parent tabcontrol  
     TabControl tc = Helper.FindParentControl<TabControl>(this);  
     if (tc == null) return;  

     // remove this tabitem from the parent tabcontrol  
     tc.RemoveTabItem(this);  
 }  
};  
}  

8、事务委托

WPF 应用程序启动时具有两个线程:一个用于处理呈现,另一个用于管理 UI。 呈现线程实际上隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。UI 线程在一个名为Dispatcher 的对象中将工作项进行排队。Dispatcher 根据优先级选择工作项,并运行每一个工作项直到完成。Dispatcher 类提供两种注册工作项的方法:Invoke 和 BeginInvoke。 这两个方法都会安排执行一个委托。Invoke 是同步调用,即它直到 UI 线程实际执行完该委托时才返回。BeginInvoke 是异步调用,因而将立即返回。

Thread thread = new Thread(new ThreadStart(() =>  
{  
// Thread.Sleep(5000);  
Dispatcher.Invoke(new Action(() =>  
{  
//方法体  
fun();  

}), null);  

}));  
thread.start();  
 
Thread t = new Thread(new ThreadStart( delegate  
{  
  tb_test.Dispatcher.BeginInvoke(new Action(delegate  
  {  
      tb_test.Text = "123";  
  }), null);  
}));  
t.Start();  


9、WPF后台改变textbox或label或textblock的字体颜色


10、Listview清空问题。

如果ListView数据源来自:listview.ItemsSource=list;

只要清空List,就能清空listview; 

如果用listview.clear();那么多次点击清空按钮就会出现:当 ItemsSource 正在使用时操作无效。改用 ItemsControl.ItemsSource 访问和修改元素。这个异常!


11、wpf动画完成后势行某一事件的,Lamda表达示;

Storyboard sb = this.Resources["storyboard"] as Storyboard;  
sb.Completed += (s, a) =>  
{  
//要做的工作  
};  
sb.Begin();  


12、wpf嵌入Winform控件

xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"   
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  


13、WPF中其它自定义类中访问主窗口中的控件解决办法

比如,在类中要查找一个StackPanel,用如下方法。

StackPanel spi = Application.Current.MainWindow.FindName("ItemStak") as StackPanel;  


14、(Dictionary.Add(key,"123") 和 Dictionary[key]="123")


如果Dictionary中已经有了key, 则再Add会报错: Dictionary 中已存在具有相同键的元素。

而 Dictionary[key]则不会报错,没有时添加,有时则修改替换,因此,更加推荐使用这个方法,更安全,不必写个if判断。


2017-05-03 0 /
NET学习
/
标签: 

评论回复

回到顶部