找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
發表文章前請先閱讀相關版規尊貴會員無限下載附件認識好友、聊天,分享生活趣事
神奇寶貝一拳超人流出overlordmg按摩無碼 ge
莉可rpg 村娘催眠アイova 初恋转录少女【漫画】

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

余家儀 衣服直接滑下

[繁]香格里拉・開拓異

[繁]反派千金等級99~

[簡]為了在異世界也能

[繁]秒殺外掛太強了,

[繁/無修正]婚戒物語
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 5658|回復: 6

[問題] C#中 lock的使用?[複製鏈接]

Rank: 1

帖子
294
積分
47 點
潛水值
16940 米
發表於 2017-10-12 10:15 AM|顯示全部樓層
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
本帖最後由 ggnnyy 於 2017-10-12 10:25 AM 編輯

各位大大好:
最近在研究訂單系統的取號機制,在多人使用的環境下訂單編號能夠不被重複取用...
上網有搜尋到許多方法,但有人提到用如下方法,我查了一下lock的鎖定好像是針對程式碼區塊的鎖定,
所以訂單系統如果是網站型態的應該是可以鎖定,但是如果是winform的型態呢?  這樣lock能達到鎖定不讓多個使用者存取到一樣的單號嗎?
  1. private void LockInsert(object i)
  2. {
  3.         lock (thisLock)
  4.         {
  5.             using (SqlConnection myConnection = new SqlConnection(SqlDataSource1.ConnectionString))
  6.             {
  7.                 SqlCommand myCommand = new SqlCommand();
  8.                 myCommand.Connection = myConnection;
  9.                 myCommand.CommandText = "Insert Product (ProNo,ProName) values (@ProNo,@ProName)";
  10.                 myCommand.Parameters.AddWithValue("@ProNo", GetProductSerialNumber());
  11.                 myCommand.Parameters.AddWithValue("@ProName", "Product_" + i);
  12.                 myConnection.Open();
  13.                 myCommand.ExecuteNonQuery();
  14.             }
  15.         }
  16. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
發表於 2017-10-12 10:20 PM|顯示全部樓層
本帖最後由 sam30525sam 於 2017-10-12 10:21 PM 編輯

lock不管你是 asp.net mvc 或 asp.net web api 或 webform都可以使用,這樣講好了,
不管你是應用程式還是網頁,其實核心都一樣,
但是要注意的點差蠻多就是了。

依照你的程式碼的話,你這個lock永遠都沒有用,
因為網頁每一次request近來,都會產生一個新的instance,
而且你又寫lock(this),這種最耗效能的東西,
...
瀏覽完整內容,請先 註冊登入會員
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 1

帖子
294
積分
47 點
潛水值
16940 米
發表於 2017-10-12 11:39 PM|顯示全部樓層
感謝SAM大~~~~~
可否在請問,如果是winform的形式(不是webform喔)
為什麼這種方式也能鎖定?
既然是鎖定程式碼區塊,winform每個用戶端不是都是獨立的個體嗎?
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
發表於 2017-10-14 12:32 AM|顯示全部樓層
ggnnyy 發表於 2017-10-12 11:39 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

感謝SAM大~~~~~
可否在請問,如果是winform的形式(不是webform喔)
為什麼這種方式也能鎖定?

我的解法,winform/網頁程式都可以,
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

帖子
372
積分
21 點
潛水值
5911 米
發表於 2017-10-18 03:02 PM|顯示全部樓層
如果只是要取訂單號碼,使用 Record Lock的方式並非是個好的方式,甚至是一個很不好的方法,取單號的方式有很多,就看你的單號顯示的重要性。
例如說:
如果只是要有一個單號做區分,可以在存檔時利用 Trigger功能在Insert時產生流水號。
如果要先看到單號,那就可以利用 SQL Transition 功能確認產生取得方式。





使用道具檢舉

Rank: 1

帖子
252
積分
187 點
潛水值
24460 米
發表於 2017-12-29 02:19 AM|顯示全部樓層
您需要的是database層次的lock 而不是程式碼的lock
序號或流水號問題 使用資料庫技術比較容易解決

使用道具檢舉

Rank: 1

帖子
13
積分
195 點
潛水值
1840 米
發表於 2018-1-21 03:14 AM|顯示全部樓層
C#的lock的使用要小心喔
建議lock物件是object且不可以是會被修改的物件,
因為當你的物件內容變了,那個lock可能會失效,比方說當你lock的對象是list、或者可以被dispose的物件。

下載: 訪客無法瀏覽下載點,請先 註冊登入會員


如果你不想要使用區塊式的lock語法,那麼你可以用Monitor.Enter,Monitor.Exit來確保程式操作是在一個Monitor操作區間
...
瀏覽完整內容,請先 註冊登入會員
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部