顯示具有 .NET程式開發 標籤的文章。 顯示所有文章
顯示具有 .NET程式開發 標籤的文章。 顯示所有文章

2013年9月29日 星期日

MVVM 概觀

參考:
1.[Architecture] MVP, MVC, MVVM, 傻傻分不清楚~
MVVM 的架構一樣是 M, V 分離,但中間是以 VM (ViewModel) 來串接,這個 ViewModel 比較像是 View 的一個代理程式,它負責直接對 Model 做溝通,而 View 可以透過一些機制 (ex: Events, Two-way Databindings, ...) 來和 ViewModel 溝通以取得資料或將資料拋給 Model 做存取等工作,ViewModel 也可以作為和外部系統的代理程式,例如 Web Service 或是 REST Service 或是 Enterprise Services 等等,不過它和 MVC 不同的地方,就是 ViewModel 和 View 的黏合度比較高,因為 View 必須要透過 ViewModel 才可以取得 Model,而 ViewModel 又必須要處理來自 View 的通知訊息,所以雖然職責一樣分明,但是卻不像 MVC 那樣可以擴展到整個系統元件都能用。

ViewModel 最好是可以進行單元測試,這樣會更佳。

以下有幾個圖可以解釋MVVM架構:












2013年5月30日 星期四

C# HttpListener 範例

建立Console專案.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener listener = new HttpListener();
            try
            {
                listener.Prefixes.Add("http://*:8055/"); //要監聽的URL範圍
                listener.Start(); //開始監聽端口,接收客户端請求
                Console.WriteLine("Listening");
                while (true)
                {
                    //獲取一個客户端請求為止
                    HttpListenerContext context = listener.GetContext();
                    //將其處理過程放入線程池(Pool)
                    System.Threading.ThreadPool.QueueUserWorkItem(ProcessHttpClient, context);
                }
            }
            catch (Exception e)
            {

                Console.WriteLine(e.Message);
            }
            finally
            {
                listener.Stop(); //關閉HttpListener
            }
        }

        //客户請求處理
        static void ProcessHttpClient(object obj)
        {
            HttpListenerContext context = obj as HttpListenerContext;
            HttpListenerRequest request = context.Request;
            HttpListenerResponse response = context.Response;
            //string s = request.QueryString["command"];
            //do something as you want
            string responseString = string.Format(" {0}", DateTime.Now);
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);

            //關閉輸出流,釋放相應資源。
            output.Close();
        }
    }
}




2013年3月25日 星期一

[C#] 刪除1天前某個目錄的檔案

            //刪除1天前某個目錄的檔案,減少temp檔佔用空間
            try
            {
                string TmpRootPath= @"C:\temp";
                DirectoryInfo TempInfo = new DirectoryInfo(TmpRootPath);
                FileInfo[] TempArray = TempInfo.GetFiles();
                if (TempArray.Length > 0)
                {
                    for (int i = 0; i < TempArray.Length; i++)
                    {
                        string TempFileName = TempArray[i].Name;
                        DateTime dtTempFileEditTime = TempArray[i].LastWriteTime;
                        TimeSpan ts = DateTime.Now - dtTempFileEditTime;
                        int differenceInDays = ts.Days;
                        if (differenceInDays > 1) File.Delete(TmpRootPath+ TempFileName);
                    }
                }

2012年2月2日 星期四

[.NET程式開發] Console程式新增定義檔

之前在開發Window Form專案,使用Settings.settings來設定義值是件非常直覺又方便的事。


 使用時只要宣告就可以輕鬆取得你要的字串:
string sABC = Properties.Settings.Default.ABC;

今天有同事在寫Console程式也想要使用設定檔的功能,但是卻怎樣也取不到值一直出錯。我看他的設好值了,取值也用 Properties.Settings.Default.xxx 跟我之前的習慣是一樣的呀!??

後來看了一下官方的文章: 專案設計工具、設定頁
恩恩~老實說,我還是不知道Console程式在使用設定檔出了什麼問題。

Console程式是不會像Window Form一樣自動把Settings.settings預設建入專案內,如果Console程式想要用到Settings的功能,就要自己在 [加入 /新增項目]選擇 [設定頁],這樣就會如下圖:



ps.一開始只有Settings1.settings,我好奇點開了Settings1.settings裡面有[檢視程式碼]才出現Settings.cs喔!

這時後,我就在想Console程式怎麼和新增的Settings1.settings有關連,用Properties.Settings.Default.xxx就可以了嗎? 這也太神奇了!

從Settings1.cs很快就發現:Settings1.settings其實裡面就一個clsss,那就用一般取用class的方法應該就行了!

string sABC = Settings1.Default.ABC;

成功囉!   這樣你有很多的設定頁的話,可以將檔名改有意義的名稱,A專案的設定頁也可以給B專案直接使用,彈性還滿大的!

喔耶!  小小的發現~ 順便補充:

設定頁裡的範圍
選取 [應用程式] 或 [使用者]。
  • 應用程式範圍的設定 (例如連接字串) 與應用程式關聯,因此,使用者不能在執行階段進行變更。
  • 使用者範圍的設定 (例如系統字型) 是針對使用者偏好設定而設計,因此,使用者可以在執行階段進行變更。

2012年1月12日 星期四

VS2010 匯入 Northwind 範例資料庫

首先要去微軟那兒下載北風資料庫,再進行以下的操作。

1.開 [SQL Server Management Studio] 點選 [資料庫] 右鍵選擇 [還原資料庫]
 


2.開 [SQL Server Management Studio] 點選 [資料庫] 右鍵選擇 [還原資料庫]


3.執行[確定]就大功告成了。

4.在VS 2010使用北風資料庫













.NET發佈 - ClickOnce 設定

初步的練習,我的理解是下列的圖示,應該是沒錯吧!?



1.在IIS設虛擬目錄,別名隨意:TestClickOnce,將實體路徑設為 C:\inetpub\testpub\


1.點選你剛設好的虛擬目錄,雙擊中間的[瀏覽目錄],要設定[開啟]。

3.用[系統管理員]身份,執行VS2010,簡單做一個應用程式。在專案名稱上,右錄選擇[屬性/發行]。如下圖,把資料填上,若有安裝前的必要條件,也可以這此設定。
ps.注意正式發佈時,URL最好不要輸入localhost,以實際的ip為主。


4.按下[立即發行],這樣OneClick就成功囉!



  

win7 設定 IIS

在 Windows 7 的環境下,若要開發 ASP.NET 程式,則 控制台 \ 程式集 \ 開啟或關閉 Windows 功能 設定如下:


此外若要由其它電腦連到本機的 IIS,那還需要設定防火牆如下:控制台\所有控制台項目\Windows 防火牆\允許的程式
勾選 [World Wide Web 服務 (HTTP)]




基本上,以上的防火牆設定應該就可以讓別台電腦連線到我的IIS了,如果還不行可以再試試看開PORT的方法:

windows防火牆 / 進階設定/ 輸入規則 / 新增規則 / 規則類型:連接PORT /
通訊協定:TCP、特定本機連接PORT:輸入你網站設定的PORT,一般是用80 PORT /
執行動作:允許連線 /
設定檔:網域、私人選取。公用可以依需求看要不要勾選,這個選項看個人設定。
名稱隨意打,方便以後你好辨識。
有了連入的規則,也要有連出的規則,照上述的步驟一樣在弄一個。

測試:在IE上輸入 http://localhost/  ,或是用別人的電腦在IE輸入 http://IP_Address  就可以看到以下的畫面,恭禧你成功啦!

2011年11月30日 星期三

[C#] 畫縮圖詭異的情況

 Peggy Yang的學習筆記




因為工作上的需要,要把使用者手繪的圖先處理為縮圖,再印至出來。
不過就在印出來的時後出現讓我很confuse的事情。

*_Image 是原圖檔

Image printImage = _Image.GetThumbnailImage(
                                                            Width,
                                                            Height,
                                                            null,
                                                            IntPtr.Zero
                                                       );
pGraphics.DrawImage(printImage, new Point(pLocation.X, pLocation.Y - 8));

這樣的結果在我 win xp 32bit的環境下,列印得情況有誤,如下圖(上方手繪的軌跡圖):












一模一樣的程式在我 win 7 64bit的環境下,列印得情況正確,如下圖(上方手繪的軌跡圖):














這樣我非常的不開心,怎麼會發生這種[掉漆]的情況,明明一樣的code竟然有不同的反應。
本來想要放棄的,但是這是要安裝在客戶端的應用程式,誰知道使用者的環境是什麼情境,讓我心裡擔憂的很,後來左查右查,上試下試,一度懷疑是GetThumbnailImage的問題,也懷疑是解析度的問題,try到最後就從DrawImage下手,終於找到一勞永逸的方法。

只要DrawImage在的方法裡,指定畫圖的寬及高即可。

Image printImage = _Image.GetThumbnailImage(
                                                             Width,
                                                             Height,
                                                             null,
                                                             IntPtr.Zero
                                                 );
pGraphics.DrawImage(printImage, pLocation.X, pLocation.Y - 8, printImage.Width, printImage.Height);

2011年7月21日 星期四

WPF - Windows Presentation Foundation



之前在準備認証考試,70-511這科以一題之差Fail掉了,現在我再捲土重來好好準備。加油!


WPF
Windows Presentation Foundation(WPF)是美國微軟公司推出.NET Framework 3.0的組成部分之一,它是一套基於XML、.NET Framework、向量繪圖技術的展示層開發框架,微軟視其為下一代使用者介面技術,廣泛被用於Windows Vista的介面開發。
WPF使用一種新的XAML(eXtensible Application Markup Language)語言來開發介面,這將把介面開發以及後台邏輯很好的分開,降低了耦合度,使使用者介面設計師與程式開發者能更好的合作,降低維護和更新的成本。


維基百科-淺顯易記的整理
MSDN 28 集 WPF 線上課程  /  教學短片