2018/5/10

Tashiba & Samsung UFS Device Naming Rule

記錄一下兩家Flash大廠UFS產品的命名規則資訊

再補上稍舊的資訊

2018/2/13

【C#】關於UI跨執行緒控制元件的問題

情境說明:在視窗介面開發常常會為了避免視窗凍結而將執行較久的函數用執行緒(Threading)去執行,若過程中需要把一些資訊丟到視窗元件上或是從視窗元件取得特定資料,就會發生跨執行緒存取權限的問題(=> 使用的執行緒與建立控制項的執行緒不同)。

解決方法:透過C# Delegate(委派)機制把工作丟給另個執行緒(控制元件的執行緒)代為處理

委派的寫法其實很簡單,其實就是幫元件寫個CallBack Function,在函數中首先先判斷元件是否在同個執行緒,若不是則呼叫CallBack Function(底下範例的if區塊),如果是則看需求把動作完成即可
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
delegate void TextBoxAppendCallback(TextBox Ctl, string Str);
public void TextBoxAppend(TextBox Ctl, string Str)
{
    if (Ctl.InvokeRequired)
    {
        TextBoxAppendCallback d = new TextBoxAppendCallback(TextBoxAppend);
        this.Invoke(d, new object[] { Ctl, Str });
    }
    else
    {
        Ctl.AppendText(Str);
    }
}
若只有幾個地方需要用到元件存取,可以考慮偷懶一點的寫法
1
2
3
4
this.Invoke((MethodInvoker)delegate()
{
    textBox1.AppendText("Hello, Sleep 3 Seconds ..." + Environment.NewLine);
});

完整範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public partial class Form1 : Form
{
	public Form1()
	{
		InitializeComponent();
	}

	delegate void TextBoxAppendCallback(TextBox Ctl, string Str);
	public void TextBoxAppend(TextBox Ctl, string Str)
	{
		if (Ctl.InvokeRequired)
		{
			TextBoxAppendCallback d = new TextBoxAppendCallback(TextBoxAppend);
			this.Invoke(d, new object[] { Ctl, Str });
		}
		else
		{
			Ctl.AppendText(Str);
		}
	}

	private void Test()
	{
		this.Invoke((MethodInvoker)delegate()
		{
			textBox1.AppendText("Hello, Sleep 3 Seconds ..." + Environment.NewLine);
		});
		Thread.Sleep(3000);
		this.Invoke((MethodInvoker)delegate()
		{
			textBox1.AppendText("I'm Back, Oh Wait One More Second, Please ..." + Environment.NewLine);
		});
		Thread.Sleep(1000);
		TextBoxAppend(textBox1, "Everything Is Done" + Environment.NewLine);
	}

	private void button1_Click(object sender, EventArgs e)
	{
		var thread = new Thread(Test);
		thread.Start();
	}
}

2018/1/13

【Focus】一萬公里保養工單

記錄一下去年十月回廠一萬公里保養工單,這次總共花費3143元
  • 工資       (900)
  • 5W30合成引擎機油 (498 * 3.8 = 1892)
  • 機油芯      (263)
  • 放油塞墊片    (88)
跟五千公里相比主要是工資多了300元,大概是多了輪胎對調工資才多加0.5個單位吧!?


2017/12/28

【C#】偵測Disk插入/卸除


要在C#中偵測磁碟機的改變(新增/插入、移除/卸除)可以透過ManagementEventWatcher類別加上Windows提供的WMI來達到此功能,直接看程式碼內容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace DiskDetect
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementEventWatcher watcher = new ManagementEventWatcher();
            WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2 or EventType = 3");
            watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            watcher.Query = query;
            watcher.Start();

            Console.ReadLine();
        }

        static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            if (Convert.ToInt16(e.NewEvent.Properties["EventType"].Value) == 2)
            {
                Console.WriteLine("Disk Insert: " + e.NewEvent.Properties["DriveName"].Value);
            }
            else
            {
                Console.WriteLine("Disk Remove: " + e.NewEvent.Properties["DriveName"].Value);
            }
        }
    }
}

參考連結:
ManagementEventWatcher Class
Win32_VolumeChangeEvent

Keyword: How to detect disk state in C# language

2017/12/21

【AutoIt】插入一個執行時期的錯誤

在任何程式語言要插入一個執行時期錯誤(run time error)最快的方式大概就是誤用陣列吧,所以要在AutoIt中埋入一個執行時期錯誤最簡單的方式也不外乎是用這招,直接看底下範例:

1
2
3
4
5
6
#cs
Inject a run time error for autoit script
#ce
Global $arr[1]
$arr[0] = 50
MsgBox(0, "Run Time Error", $arr[1])


2017/4/6

【Focus】新成員:鐵男?小白?

想法真的會隨時間改變,原先很篤定先買房再買車,踏入社會堅守了六年左右還是轉念了,至於買車用途也不是為了上下班代步,很單純就是假日能自由的跑遠?



2017/3/25

【Focus】五千公里保養工單

由於車子比較少使用里程累積速度較慢,滿半年也不過多了五千公里的里程,不然根據手冊每一萬公里再回廠保養即可。
這次回廠一樣就讓接待直接帶出保養套餐,很好說話的我還是沒能成功ㄠ到折扣優惠,最後得到一瓶全效機油添加劑,看在接待跟技師都很熱心幫忙處理車子就不計較那點折扣了,這次仍是指定吳振毅技師幫忙,沒什麼考量想法,第一次找他是因為論壇車友鼎力推薦,這次還回去找他就是第一次過程覺得還不錯就繼續讓他服務囉,畢竟固定技師保養以後車有什麼怪毛病應該可以得到比較多的用心吧...!?