多線程下的 Lambda表達式 異步 WebClient 讀取程序圖標,來做爲托盤 圖標 logo ico

//讀取程序圖標,來做爲托盤圖標
this
.notifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath);

 

 

線程池網絡

ThreadPool.QueueUserWorkItem(callBack =>
                {
                    XiaoAoHelper.logout();
                });

 

 

解決辦法:函數

1.this

直接在窗體的構造函數中加:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;此時把全部的控件合法性線程檢查所有都給禁止掉了。spa

 

 

 

            Thread t2 = new Thread(() =>
            {
                for (int i = 1; i <= 10; i++)
                {
                    this.BeginInvoke(new Action(() =>
                    {
                        progressBar1.Value = i * 10;
                    }));
                    Thread.Sleep(1000);
                }
            });
            t2.IsBackground = true;
            t2.Start();

 

        private void CheckUpdateVersionAnsyn()
        {
            try
            {
                Uri endpoint = new Uri(string.Format("{0}v.aspx?timer={1}", App.Url, DateTime.Now.ToString()));
                WebClient client = new WebClient();
                var are = new AutoResetEvent(false);

                client.DownloadStringCompleted += (s, e) =>
                {
                    are.Set();

                    if (e.Error == null)
                    {
                        int ver = 0;
                        ver = ExecVaspx(e.Result);
                        base.Dispatcher.BeginInvoke(() =>
                        {
                            if (Application.Current.IsRunningOutOfBrowser)
                            {
                                OOBUpApp(ver);
                            }
                            else
                            {

                                reLogin();

                            }
                        });
                    }
                    else
                    {
                        base.Dispatcher.BeginInvoke(() =>
                        {
                            reLogin();
                            App.ShowMessage("網絡鏈接失敗,未獲取到新版本!", AletrEnum.Error);
                        });
                    }
                };

                client.DownloadStringAsync(endpoint);

                if (!are.WaitOne(5000))
                {
                    base.Dispatcher.BeginInvoke(() =>
                    {
                        reLogin();
                        App.ShowMessage("網絡鏈接失敗,未獲取到新版本!", AletrEnum.Error);
                    });
                    client.CancelAsync();
                }
            }
            catch 
            {
                base.Dispatcher.BeginInvoke(() =>
                {
                    reLogin();
                    App.ShowMessage("發生系統性錯誤,沒法更新!", AletrEnum.Error);
                });
            }
        }
相關文章
相關標籤/搜索