2018年12月7日 星期五

System.IO.Directory.GetFiles 在 C:\ 槽和其它磁碟槽取得的檔案名稱數量不同

一支用很久的程式,今天客戶突然報案說開啟有錯誤發生,
問題是相同的設定檔和檔案,為何在我電腦不會有錯,在客戶端會發生錯誤,
剛好同事也提到,同樣的檔案放到他家裡電腦也發生同樣的錯誤,但在公司電腦不會,
這下子激起我的好奇心想一探究竟。

請同事把發生問題的檔案給我,讓我試試,
因為 Skype 傳來的檔案,我預設放 C:\
結果開啟真的出錯,我再把檔案放到開發專案磁碟槽準備 Debug 結果正常沒錯誤!見鬼了....

將專案 Copy 一份到 C:\ 同時開啟後進入 Debug Mode 看怎麼回事,
看來真的採到 Microsoft 的雷了!

首先在 C:\ 和另一個磁碟槽建立測試用檔案
我把檔案放在 C:\ 和 E:\


然後將程式中斷,在 [即時運算視窗] 中,把資料印出來,
可以發現檔案數量不同,(F3.xml.123 是屬於副檔名 123 不是 XML 所以不會被列出來)
? System.IO.Directory.GetFiles("C:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly)
{Length=5}
    (0): "C:\DEMO_TEST\F1.xml"
    (1): "C:\DEMO_TEST\F2.xml"
    (2): "C:\DEMO_TEST\F3.xml"
    (3): "C:\DEMO_TEST\F3.xml_123"
    (4): "C:\DEMO_TEST\F3.xml123"
? System.IO.Directory.GetFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly)
{Length=3}
    (0): "E:\DEMO_TEST\F1.xml"
    (1): "E:\DEMO_TEST\F2.xml"
    (2): "E:\DEMO_TEST\F3.xml"


我同時用 System.IO.Directory.GetFiles 還有 System.IO.Directory.EnumerateFiles 兩個寫法測試,結果一樣,
        '使用 GetFiles 方式
        For Each strFileName As String In System.IO.Directory.GetFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly)
            Debug.Print(strFileName)
        Next
        '使用 EnumerateFiles 方式
        Dim fn As Object = System.IO.Directory.EnumerateFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly)
        For Each strFileName As String In fn
            Debug.Print(strFileName)
        Next

查了一下官網的 System.IO.Directory.GetFilesSystem.IO.Directory.EnumerateFiles 說明,
原來兩個 SearchPattern 作用相同,難怪結果一樣,

當 SearchPattern 設定的 Extension(副檔名) 剛好為三個字元,
會同時將副檔名符合的三個字元以外的其它檔案也一並找出來,
造成 .XMLxxx 的副檔名都一起被列出來了,
所以官網上的說明符合 C:\ 搜尋的結果,但和我電腦上其它磁碟槽的結果不符!

這個問題還真是擾人呀,
趕快把這個問題記錄下來,不然下次忘記又要踩雷了!!


2018年9月14日 星期五

多執行緒中的多執行緒錯誤


早先遇到一個問題,最近又被問到同樣問題,先做個記錄.

主程式 Load 一個 DLL 檔進來,而 DLL 內有個 Form ,
Form 裡面又用到另一個 COM 元件或另一執行緒,這時會出現以下錯誤 :
[ 目前的執行緒必須先設為單一執行緒 Apartment (STA) 模式,才能進行 OLE 呼叫。請確認您的 Main 函式上已經標記有 STAThreadAttribute ]

解決方式為

1. 在 Class 中先宣告一個全域變數

    ''宣告一個全域變數
    Dim _threadForm As Threading.Thread


2. 加入 Delegate 委派呼叫
    ''--- 寫法一 直接帶參數的委派呼叫
    Private Delegate Sub OpenFormCallback(frm As Windows.Forms.Form)
    Private Sub OpenForm(frm As Windows.Forms.Form)
        If frm.InvokeRequired Then
            frm.Invoke(New OpenFormCallback(AddressOf Me.OpenForm), New Object() {frm})
        Else
            frm.ShowDialog()
        End If
    End Sub
    ''--- 寫法二 不帶參數的委派呼叫
    'Private Delegate Sub OpenFormCallback()
    'Private Sub OpenForm()
    '    If FormObject.InvokeRequired Then
    '        FormObject.Invoke(New OpenFormCallback(AddressOf Me.OpenForm), New Object() {})
    '    Else
    '        FormObject.ShowDialog()
    '    End If
    'End Sub



3. 在要呼叫的 Function 中寫
''--- 寫法一 直接帶參數的委派呼叫
 _threadForm = New Threading.Thread(Sub() Me.OpenForm(Me.FormObject))
''--- 寫法二 不帶參數的委派呼叫
'_threadForm = New Threading.Thread(AddressOf OpenForm)

 _threadForm.SetApartmentState(Threading.ApartmentState.STA) '將執行緒指定為單一執行緒
 _threadForm.Start()


以上,打完,收工,做記錄!

2017年8月9日 星期三

GPS 導航 APP 比較及試用心得

最近因為舊手機 HTC D500 換電池,要測試電池是否能用,順便裝GPS導航軟體比較一下,
所以拿目前的 ASUS PadFone S 一起測試,

我主要是以評分較優的為主要測試目標,另外再以其它主流導航軟體比較
首先裝了
Karta GPS - 離線導航  另一支手機安裝   導航Polnav mobile

Karta GPS 若是晚上使用,會自動轉成夜間模式,
另外超速時,會有嗶聲提示,轉彎處也會播路名,

白天模式   夜間模式


同一路段兩個導航畫面比較

Karta GPS  導航Polnav



Karta GPS  導航Polnav

導航Polnav 還多了休息站及交流道提示
不過,,導航Polnav若要播報路名和測速相機,就要另外購買套件,
但價格都比任何一家導航便宜,
路名播報 $60 , 測速相機 $90,即時路況 $65 ,進階 $90
這些我都沒買,所以沒法測試。

兩者比較:
Karta GPS 的路徑規劃較容易導到巷弄中,在重新規劃路徑時很容易迷路,操作介面不太友善,有很大的進步空間 (直接淘汰)
導航Polnav的路徑規劃是我測試以來算是較優秀的,畫面資訊也詳細,所以決定最後 PK 賽,就以這版來比較其它導航軟體



接下來再測試

Waze (位智)社群導航、地圖與交通另一支手機安裝樂客導航王N5
(我是裝 N3 舊版的,拿N5的圖和連結來用)

先來看兩者在同一路段的比較

Waze (位智)   PAPAGO!

Waze (位智)   導航王


Waze (位智)還有一個特色,就是我把車停好後,走路到某定點,它會記錄車子停放的位置,對於找車很方便

不過,Waze (位智)在程式起來和結束都會一直連網路,送一堆東西,不知道背後送了什麼出去,心理總是毛毛的。


兩者比較:
Waze (位智)的地圖在很多較小的巷子或較少車子開的雙線道並沒有記錄,所以導航會稍微多繞一點路,但都以大馬路為主,所以差異不大,
語音是中國口音及語法,會播報 [前方兩百米處,向右拐,再向右拐,然後直行] 或是 [前方有攝像頭], 但不會播報路名和限速,路線規劃能力比其它導航軟體差(直接淘汰)

導航王在主要路口和交流道,都會有圖示提醒如何轉彎或顯示路線,路線規劃還是會導到巷弄中,但還可以接受,他的測速提示就做得不錯,



再來輪到 PAPAGO 了, 我拿第一輸的導航Polnav來比較
導航PAPAGO!Taiwan體驗版-GOLiFE    VS   導航Polnav mobile

(楠梓百幕達)
導航PAPAGO!   導航Polnav

導航PAPAGO!   導航Polnav

導航PAPAGO!   導航Polnav

兩者比較:

PAPAGO! 主要路口和交流道有更貼心的圖示警告,和導航王一樣,也有速限和測速警告

導航Polnav路線規劃能力差不多,若故意開錯路,重新規劃的速度到是比 PAPAGO 要快得多



整體比較

路徑規劃 : 導航Polnav(優) >  PAPAGO! > 導航王 > Waze(位智) > Karta GPS
畫面美觀 : 導航王(優) > PAPAGO! > 導航Polnav > Waze(位智) > Karta GPS
操作方便 : 導航Polnav(優)  > 導航王 > PAPAGO! > Karta GPS > Waze(位智)
開機速度 : Karta GPS > PAPAGO! = 導航王 > Waze(位智) > 導航Polnav (最慢)
規劃速度 : 導航Polnav(優) > PAPAGO! > 導航王 > Karta GPS > Waze(位智)
路線優異 : 導航Polnav(優) > PAPAGO! > 導航王 > Karta GPS > Waze(位智)

目前的測試結果,
我會考慮花錢買的導航軟體應該是
1.  導航Polnav (最便宜,效果也還可以接受)
2. 再來會是 PAPAGO!
3. 最後是 導航王 ,
不過我用了導航王的語音,感覺很方便,只是辨識率不高,常會找不到,下次要來試 PAPAGO 的語音,看哪一個比較好用。

後續若有測試再補上結果!

2016年12月21日 星期三

冰箱比較,不是推薦和評價

因為家裡冰箱客滿,需要再多買一台冰箱,
但礙於空間的關係,又不能買太大台,
所以將目標先鎖定 600L 左右的機種比較,(不是推薦和評價)
主要的排名如下圖:

第一欄位是總分名次,這是分數越低越好,
第二欄位是容量名次,
第三欄位是能源因數值名次,
第四是年耗電名次
這些欄位的名次都是越少越好,

檔案下載位置[冰箱比較檔案下載]


由表列可以很清楚要選定哪幾個廠牌和型號,
SHARP SJ-GF60BT-T
惠而浦 WRT541SZDM
惠而浦 WRT541SZDW
SHARP SJ-PD58V-BK
HITACHI 日立 RG599
MITSUBISHI三菱 MR-JX64W
MAYTAG 美泰克 MRT519SZDM
國際牌 NR-C618NHG
(NR-C618HV)
SHARP SJ-PD54V-SL
HITACHI 日立 R-G616/GBK
國際牌 NR-E567MV
由以上排名中,選出 600L 以上的機種,再以價位考量,
最後選了 [惠而浦] 和 [國際牌]

接下來就是看[惠而浦]的福利品是否OK,若不行就買全新的[國際牌]囉~

2017/05/16 (補充)
詢問過使用 [惠而浦]的朋友和店家,都說聲音比較大聲,
所以最後決定買 [國際牌],
使用到目前都沒什麼可挑剔的。
唯一沒用到的是冷凍的製冰盒占空間,直接拿掉不用,還可以冰三瓶600cc的飲料

2016年7月16日 星期六

找一張合適自己的電腦椅!

前幾天我的電腦椅突然壞了,氣壓桿降到底,起不來,
我坐在椅子上好像小朋友一樣,我的大頭離桌面好近....
才打一下電腦就腰酸背痛,
所以趕緊上網找找看有什麼推薦的功學椅(電腦椅)
不查還好,一查才發現自己想要的規格,椅子價位都破萬,
我從沒買過電腦椅,還真的有嚇到,

我要的功能有
1. 扶手要可調, (因為長時間使用滑鼠,若手肘高度不對,很快就背痛)
2. 椅背要可調, (因為我有椎弓解離的毛病,需要一個可調的腰靠)
3. 椅子深度要夠,讓我可以坐好坐滿!(這也和椎弓解離有關係)
4. 要有滑輪 (每半小時要起來活動一下,純粹懶得搬椅子)
5. 要網椅 (可以盡情放屁 屁股不會因為久坐悶熱)

就只是很簡單的幾個需求,但價位可不簡單,
找了好久,終於讓我看到一家符合我需求,價位也可以接受的工廠,
只要上網搜尋 家的椅子 就可以看到很多介紹和購物網站
店名是上倫企業社 官網
地址在台南市仁德區太子路119號
(點選上方地址連結, 
可以在 GOOGLE 實景地圖上看到,工廠就是一般民宅,好像兩間透天連在一起)


當天開車去載,現場已經有另一組客人剛買好,也是自己載,
店裡則是一堆小山,客訂椅子,準備組裝出貨的備料!
本來我要買的型號,老闆說我太高,不好坐,要換另一個617-L 的型號,
現場試坐,還真的很舒適,跟老闆說明是自家用,長時間打電腦,
老闆馬上要我考慮另一個細網目材質的椅面,
老闆說明原因是,因為在家工作,就會穿短褲或內褲,長時間坐要選細一點的網布,
和大腿或屁股的肌膚之親才舒服,
嗚~~老闆,你真是太了解我啦~~

現場試摸一下布料,是有感覺細網目的比較舒服,所以決定換成細網目的椅面
價錢再多個200元,OK!的,為了我的小屁屁這點錢算什麼....

我要的功能介紹
1. 扶手要可調 ,(除了可調高,也可後收)
 

2. 椅背要可調,(後面的腰靠可以上下調整)


3. 椅子深度要夠,讓我可以坐好坐滿! (還可以仰躺,又有頭靠,頭靠可調角度)


4. 要有滑輪 (想不到是PU輪,滑起來安靜多了)


5. 要網椅 (這不用圖了,肯定是全網椅)


除了以上特點介紹
仰躺的角度還可以鎖定
(仰躺鎖定撥桿)


椅子下方這個突起物,是調整仰躺力道的旋鈕




















椅子的升降桿


當然,椅腳可以換成鋁合金椅腳,感覺更高級一點,但使用上沒差....
價位當然高一些(好像差300元)

網路可以看到類似的椅子
1. http://www.pcstore.com.tw/elanoa/M07889637.htm
2. http://cool-office.com.tw/twingo_jlc9.htm

價位在 9000 左右
也算是不便宜啦~~

對了,我買的這張椅子,
617-L 細網目,黑色塑膠椅腳,自取價: $5700
給有需要的人自行參考!


2016/07/19 (更新)
今天發現黑色椅腳會割人,也跟老闆反應這個問題,
如果有人想要購買,要注意這個問題,因為坐椅子只要一滑動,很容易就割到了。
椅腳的高度剛好割到腳踝,一滑過去一層皮就被割下來了,所以要注意,
最好拿砂紙磨一下,或用刀片割除毛邊。