關於網路那些事...

Marketing, SEO, Web trends, Programming tutorial, Web design, and Life event...

C# - AutoResetEvent 與 ManualResetEvent 控制執行緒暫停及恢復運作

C# - AutoResetEvent 與 ManualResetEvent 控制執行緒暫停及恢復運作

C# 有兩個類別可以用來調控執行緒

  • AutoResetEvent
  • ManualResetEvent

WaitOne 暫停執行緒

AutoResetEvent.WaitOne 方法可以讓執行緒進入 Join (WaitSleepJoin) 暫停狀態

Set 繼續執行緒動作

AutoResetEvent.Set 方法可以讓暫停狀態的執行緒恢復運作 ManualResetEvent 則需要呼叫 .Set 與 .Reset

這裡舉例,在 A B 兩個任務類別中

在 任務A 執行了 WaitOne() 先讓 任務A 進入 WaitSleepJoin Block 狀態

當 任務B 執行到偶數時,就執行 Set() 將 A任務 恢復運作

class Program
{
    private Thread MissionA_Thread;
    private Thread MissionB_Thread;
    private static AutoResetEvent _AutoResetEvent = new AutoResetEvent(false);
    static void Main(string[] args)
    {
        Program mProgram = new Program();
        mProgram.ProvideMission();
        Console.ReadKey();
    }
    private void ProvideMission()
    {

        //指定委派A物件
        ThreadStart MissionA_Tg = new ThreadStart(MissionA);
        //建立A任務執行緒
        MissionA_Thread = new Thread(MissionA_Tg);
        //指定委派B物件
        ThreadStart MissionB_Tg = new ThreadStart(MissionB);
        //建立B任務執行緒
        MissionB_Thread = new Thread(MissionB_Tg);

        //啟動執行緒
        MissionA_Thread.Start();
        MissionB_Thread.Start();
    }
    //任務A
    private void MissionA()
    {
        for (int i = 0; i < 10; i++)
        {
            _AutoResetEvent.WaitOne();
            Console.WriteLine("A" + i);
            Thread.Sleep(1000);
        }
    }
    //任務B
    private void MissionB()
    {
        for (int i = 0; i < 10; i++)
        {
            if (i % 2 == 0)
            {
                _AutoResetEvent.Set();
            }
            Console.WriteLine("B" + i);
            Thread.Sleep(2000);
        }
    }
}

若是 ManualResetEvent 則需要再多加一次 Reset()

Continue Reading

C# 網路連線檢查

C# 網路連線檢查

C# 可以實作 ping 網路連線檢查

實作方式如下:

class Program
{
    static void Main(string[] args)
    {
        //INIT PING OBJECT
        System.Net.NetworkInformation.Ping objPing = new System.Net.NetworkInformation.Ping();

        //設定測試連線及逾時時間
        System.Net.NetworkInformation.PingReply PingResult = objPing.Send("www.google.com.tw", 5000);

        //取得結果
        string pingMsg = (PingResult.Status == System.Net.NetworkInformation.IPStatus.Success) ? "連線成功" : "無法連線";

        Console.WriteLine(pingMsg);

        Console.ReadKey();
    }
}

Continue Reading

C# Thread 執行緒

C# Thread 執行緒

程式都會有一個主處理序

例如,在同一個主處理序,可能同時會需要送出多筆訂單、讀取大型檔案等項目要排隊

在這主要的處理序,可以額外建立新的執行緒,可以將指定的任務交給新的執行緒獨立處理

通常,需要長時運算、 等待回應的流程,就會透過建立新的執行緒來獨立運算,避免影響到其他流程

Continue Reading

Redis 安裝與入門教學

REDIS

首先安裝 Redis 環境

Download

下載Redis壓縮,解壓縮後,make執行安裝

wget http://download.redis.io/releases/redis-4.0.10.tar.gz
tar xzf redis-4.0.10.tar.gz
cd redis-4.0.10
make

啟動redis server

src/redis-server

啟動 redis clien

src/redis-cli

接著就能測試新增及取得一筆資料

> set name helloworld
OK
> get name
"helloworld"

常用指令

新增 SET 取得 GET

在測試新增及取得資料時,已經有使用過 SET 以及 GET 的方法

在 SET 資料時,可以透過冒號 : 來輔助設計key

例如,建立 admin 相關資料時,可以這樣做

set admin:name adam
set admin:id 1
set admin:phone 0912345678

get admin:name
get admin:id
get admin:phone

DEL INCR 增減數值

透過 DEL, INCR 來針對數值遞增或遞減

Continue Reading

MAC 與 Linux 安裝 composer 方式

這裡記錄幾種安裝composer的方式

  • 官方安裝方式說明
  • brew安裝方式

Composer 官方

透過下方幾個指令,安裝 composer.phar 到本機

Continue Reading

MAC 如何升級PHP版本

通常,MACOS Sierra都會預設安裝PHP5.6版本

這裡針對升級到更高階PHP版本流程進行說明:

可以透過brew 或者 curl 兩種方式來安裝 Brew

brew update && brew upgrade
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew unlink php56 
brew install php72

(如果要從7.1升級到7.2,作法如下:)

brew tap homebrew/homebrew-php
brew unlink php71
brew install php72
brew install php72-xdebug

在這過程中,如果php5.6不是透過 brew 安裝,很可能會發生錯誤

這時仍可以繼續透過 CRUL的方式來安裝

CURL

curl -s http://php-osx.liip.ch/install.sh | bash -s 7.2

安裝完畢後,可以透過下方語法檢查PHP版本

php -v

如果還無法取得到PHP7版本,可以透過輸入下面的指令來更新路徑,來取得正確版本

vim ~/.profile

# 將下面這行加入~/.profile 最後一行
export PATH=/usr/local/php5/bin:$PATH

# 離開後,接著執行
source ~/.profile

上方的路徑,可能要依照你的環境來進行調整 如果上方指令仍無法運作,最後可以再試試這個方式

export PATH="$(brew — prefix homebrew/php/php72)/bin:$PATH"

祝安裝順利,也別忘了幫我按個讚

Continue Reading

Facebook 宣布將重構 React Native 專案

React Native 官方在6/14發布一則訊息 為了使React Native更輕量化並更好地適應現有的應用程式,官方正式宣布,正式啟動重構專案

React Native 每天都在更新,在去年有超過500個開發者貢獻了超過2500次提交。

在過去的5年中,發現最初的原則,造成了後續維護上的難處,並且無法靈活的與其他本地API溝通。因此,他們已經開始研究React Native的大規模重構方式,希望能讓架構更加靈活,並更好地支援JavaScript與本地API集成。

Continue Reading

ASP.NET C# - 產生 GUID

C# 產生 GUID

C# 如何產生 GUID?

可以直接透過內建方法,產生 GUID:

Guid guid = Guid.NewGuid();
MessageBox.Show("GUID1:"+guid);

guid = Guid.NewGuid();
MessageBox.Show("GUID2:"+guid);

guid = Guid.NewGuid();
MessageBox.Show("GUID3:"+guid);

Continue Reading

Winforms C# - 透過 panel 清除表單內容

Winforms C# - 透過 panel 清除表單內容

Panel 通常會使用 Control 來控制內部元件,例如:

MainPanel.Controls.Find("TGNAME", true)[0].Text

這裡說明如何透過 panel 來清除表單群組,

製作一個清除欄位內容(TextBox, CheckBox, RichTextBox, ComboBox, MaskedTextBox) 的方法

Continue Reading

Winforms C# - 如何在同一元件執行多個事件

在設計表單時,針對單一元件執行單一事件,可以直接在事件下拉選單直接選取

如果要在同一元件(textbox, combobox, numericupdown…)執行多個事件,做法:

開啟表單 .cs 檔案,可以設定多個事件

Continue Reading

Winforms C# - DataGridView 新增 checkbox 及設定全選、全部取消功能

C# DataGridView 新增 checkbox 及設定全選、全部取消功能

新增欄位時,先在第0欄建立一個空欄位,接下來移除再插入checkbox

Continue Reading

WinForms C# ComboBox 設定值的幾種方式

WinForms C# ComboBox 設定值的幾種方式

範例說明下列情況:

如何在 combobox 賦予 items 預設值, 如何從DB取值再加入combobox items 如何設定 combobox key value 值

Continue Reading

Winforms C# - Connect To Database Example

Winform Connect MSSQL

Setup Connection Info

Setup connection information in App.config like this:

Continue Reading

Winforms C# - Login and Logout Example Tutorial

Winform Login Example Tutorial

winforms login page

LoginPage.cs

Continue Reading

PHP, Larave, Nginx 設置Header允許請求 CORS 的幾種方式

跨域資源共享 CORS (Cross-origin resource sharing) 是一個 W3C 標準

這裡主要針對 php (Laravel) 以及 nginx 如何設置 CORS 進行說明

以及 Laravel 5.5 之後的版本自定義 cros Middleware 踩過的坑進行紀錄

首先,先看一般原生PHP設定 cors 的方式

Continue Reading

.NET WinForms C# 視窗 - MetroFramework UI 框架

MetroFramework 是一個 .NET WinForms 視窗開發UI模組

這裡簡單紀錄安裝及基本使用方式

https://thielj.github.io/MetroFramework/

安裝

透過 NuGet 套件管理來安裝 首先,在專案按右鍵> 管理 NuGet 套件 在瀏覽,搜尋 MetroFramework

下載 MetroModernUI 依 Dennis Magno

Continue Reading

GitLab 正式發文慶賀 ~ 微軟以 75 億美元收購 GitHub

GitLab 正式發文慶賀 ~ 微軟以 75 億美元收購 GitHub

GitHub 正式慶賀被微軟收購的消息,正式於 Github lab 官方部落格證實(2018 年 6 月 3 日)

Continue Reading

股票市場 - 信仰長期投資的人告訴你為什麼不要玩期貨

期貨越玩越輸 沒有可愛… 對散戶來說保證是惡夢 傷財傷神傷身又傷心 賠大錢是可以保證的

Continue Reading

股票市場 - 現金殖利率是甚麼?

現金殖利率 (Dividend yield),主要是針對定期存股領取利息的市場常用的分析指標

簡單來說,就是你買的股票價位,分配的股利有多少

計算方式是: 現金殖利率 = 每年股利/股價

例如,你買進一張股票價格為20元,如果現金股利每年發送 1 元,則現金殖利率就等於 5%

現金殖利越高,代表這張股票報酬率越高,一般就會將這種股票納入適合定存概念股

Continue Reading

注意! Google 為加速推動 Https 普及化,將把http 網站標記不安全警示

Google 安全策略: 您的網站若未使用SSL憑證的將被標記為不安全! Http 網站應全面升級 Htpps 加密連線

Google Chrome 官方部落格發布了一項瀏覽器安全指標,針對先前的一項 HTTP 標記為不安全以移除 Https 安全標示的 計畫書提到:

為什麼要使用 SSL Https 加密呢?

使用 SSL憑證讓網頁支援 Https 加密連線 可以讓使用者避免備中間人竊聽擷取隱私訊息及帳號密碼資訊,應該視為優先策略

Continue Reading