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的取值和键的方法

 foreach (DictionaryEntry de in HtServerVSName)//HtServerVSName是HashTable

            {
                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的字体颜色

textbox.Foreground = new SolidColorBrush(Colors.AliceBlue);  //用固态画刷填充前景色

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判断。



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值