Trang 3 trên tổng số 6 Đầu tiênĐầu tiên 12345... Cuối cùngCuối cùng
Từ 21 tới 30 trên tổng số 51 kết quả

Đề tài: [C#] Những thắc mắc cơ bản.

  1. #21
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mặc định [C#] Những thắc mắc cơ bản.

    Ok, cách trên mình đã xử lý gần xong. Tuy nhiên chưa nghĩ ra cách nào khác nên cần tìm hiểu thêm sau.
    [Thắc mắc 8]
    1.Vấn đề: Khi chương trình của mình đã run
    Nếu tiếp tục open một lần nữa, vậy:
    "Làm thế nào để báo lỗi là chương trình đã dùng, và không phép open nữa"
    2.Giải pháp tạm thời như sau:
    Dùng một cờ ghi vào registry
    (Tuy nhiên nếu mất điện thì cờ đó vẫn tồn tại, nếu lần sau thì sẽ không mở được nữa)
    Vui lòng chỉ giúp.
    Thanks.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  2. #22
    Ngày gia nhập
    10 2007
    Bài viết
    37

    Mình biết đc 2 cách:
    1.Lấy các process của windows rồi so sánh
    Visual C# Code:
    1. [STAThread]
    2. static void Main()
    3. {
    4.     //get the current process
    5.     Process oCurrentProcess = Process.GetCurrentProcess();
    6.  
    7.     //get all other process by the same name, atleast one will be returned - the current one.
    8.     Process[] arrProcesses = Process.GetProcessesByName(oCurrentProcess.ProcessName);
    9.  
    10.     bool bProcess = false;
    11.     //go thru all of them
    12.     foreach (Process oProcess in arrProcesses)
    13.     {
    14.         //if the id is different, that means another process by the same name exists
    15.         if (oProcess.Id != oCurrentProcess.Id) //
    16.         {
    17.             MessageBox.Show("Another instance of the application is already running");
    18.             bProcess = true;
    19.             break;
    20.         }
    21.     }
    22.  
    23.     if (bProcess)
    24.     {
    25.         return;
    26.     }
    27.     Application.Run(new Form1());
    28. }
    2.Cách này hay hơn
    If a thread acquires a mutex, the second thread that wants to acquire that mutex is suspended until the first thread releases the mutex.

    Visual C# Code:
    1. [STAThread]
    2. static void Main()
    3. {
    4.     bool createdNew;
    5.  
    6.     Mutex m = new Mutex(true, "YourAppName", out createdNew);
    7.  
    8.     if (!createdNew)
    9.     {
    10.         // app is already running...
    11.         MessageBox.Show("Only one instance of this application is allowed at a time.");
    12.         return;
    13.     }
    14.  
    15.     Application.Run(new Form1());
    16.  
    17.     // keep the mutex reference alive until the normal termination of the program
    18.     //GC.KeepAlive(m); //Optional
    19. }

  3. #23
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi ntcuong Xem bài viết
    Visual C# Code:
    1. [STAThread]
    2. static void Main()
    3. {
    4.     //get the current process
    5.     Process oCurrentProcess = Process.GetCurrentProcess();
    6.  
    7.     //get all other process by the same name, atleast one will be returned - the current one.
    8.     Process[] arrProcesses = Process.GetProcessesByName(oCurrentProcess.ProcessName);
    9.  
    10.     bool bProcess = false;
    11.     //go thru all of them
    12.     foreach (Process oProcess in arrProcesses)
    13.     {
    14.         //if the id is different, that means another process by the same name exists
    15.         if (oProcess.Id != oCurrentProcess.Id) //
    16.         {
    17.             MessageBox.Show("Another instance of the application is already running");
    18.             bProcess = true;
    19.             break;
    20.         }
    21.     }
    22.  
    23.     if (bProcess)
    24.     {
    25.         return;
    26.     }
    27.     Application.Run(new Form1());
    28. }
    Cái này có thể sửa lại chút ( theo mình thì vậy ^^ )

    Visual C# Code:
    1. [STAThread]
    2. static void Main()
    3. {
    4.     //get the current process
    5.     Process oCurrentProcess = Process.GetCurrentProcess();
    6.  
    7.     //get all other process by the same name, atleast one will be returned - the current one.
    8.     Process[] arrProcesses = Process.GetProcessesByName(oCurrentProcess.ProcessName);
    9.  
    10.         //go thru all of them
    11.     foreach (Process oProcess in arrProcesses)
    12.     {
    13.         //if the id is different, that means another process by the same name exists
    14.         if (oProcess.Id != oCurrentProcess.Id) //
    15.         {
    16.             MessageBox.Show("Another instance of the application is already running");
    17.             return();//here
    18.         }
    19.     }
    20.         Application.Run(new Form1());
    21. }
    Cảm ơn ntcuong nhìu.
    Hai cách đều chạy tốt. Mình sẽ MSDN thêm để xem cách nào hay hơn.
    Nếu không nhầm thì cách hai cũng tạo một cờ tạm trong process.
    Nếu open lần thứ hai thì báo lỗi.
    Còn cách 1 thì phải duyệt tất cả các process, trường hợp xấu nhất là chương trình nằm cuối của dãy process - > chậm.
    Hix, mạng mấy ngày nay lỗi hoài và mất điện.Mình sẽ tìm hiểu sau.
    Thanks.
    Đã được chỉnh sửa lần cuối bởi NT_OnlyLove : 08-04-2008 lúc 11:24 PM. Lý do: [Không sử dụng thẻ color trong tag code]
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  4. #24
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Hix, sau một hồi tìm hỉu mà chưa bít cách nào hay hơn.
    Tuy nhiên khi thử thì:
    1.Cách 1 hoàn toàn không bị sai
    2.Cách 2 nếu mở lần thứ 3 hoặc nhiều hơn thì vẫn mở được
    Kết luận hiện thời:
    Cách 1 là hay hơn
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  5. #25
    Ngày gia nhập
    10 2007
    Bài viết
    37

    Hix, kết luận đau lòng.
    Dựa vào "If a thread acquires a mutex, the second thread that wants to acquire that mutex is suspended until the first thread releases the mutex."
    mutex đc Support by OS
    => cách thứ 2 không thể nào sai đc.

  6. #26
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mặc định [C#] Những thắc mắc cơ bản.

    Trích dẫn Nguyên bản được gửi bởi ntcuong Xem bài viết
    Hix, kết luận đau lòng.
    Dựa vào "If a thread acquires a mutex, the second thread that wants to acquire that mutex is suspended until the first thread releases the mutex."
    mutex đc Support by OS
    => cách thứ 2 không thể nào sai đc.
    ^^!
    Mình kết luận dựa vào thực tế mình làm mà.
    Mình chạy thử cả hai cách và thấy cách 2 vẫn bị sai.
    Bạn có thể thử giùm mình không?
    Với cách thứ hai ấy, cứ open nhiều lần vào xem thế nào nhé.
    Mình sẽ tìm hiểu thêm sau về cách thứ hai, để thay đổi lại nhận xét đó.
    Thanks!
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  7. #27
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    [Thắc mắc 9]
    Vấn đề 1:
    Khi ghi dữ liệu ra một file và đặt luôn ở thư mục chứa.
    Tuy nhiên trước đó có sử dụng opendialog.
    Vậy:
    - Làm thế nào để xóa bỏ cái lưu vết của opendialog?
    - Làm thế nào để khi chạy chương trình có thể lấy link tới thư mục chứa file.exe này?
    ----------------
    Vấn đề 2 :
    Cho chương trình mở một file nhạc.
    Vậy mà khi mở file .wav thì báo lỗi.
    Nếu lấy links trong thư mục media của windows thì lại chạy được
    ?
    Mặc định của nó là .wav , vậy làm thế nào để nó chơi được .mp3 vậy?
    Thanks.
    Đã được chỉnh sửa lần cuối bởi NT_OnlyLove : 10-04-2008 lúc 01:27 PM. Lý do: [incorrect]
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  8. #28
    Ngày gia nhập
    10 2007
    Bài viết
    37

    Vấn đề 1:
    Khi ghi dữ liệu ra một file và đặt luôn ở thư mục chứa.
    Tuy nhiên trước đó có sử dụng opendialog.
    Vậy:
    - Làm thế nào để xóa bỏ cái lưu vết của opendialog?
    - Làm thế nào để khi chạy chương trình có thể lấy link tới thư mục chứa file.exe này?
    Mình kô hiểu xóa bỏ cái lưu vết là gì, nhưng OpenFileDialog có property InitialDirectory để chọn Folder mặc định.
    Visual C# Code:
    1. OpenFileDialog ofd = new OpenFileDialog();
    2. //Chọn My Document của current user
    3. ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
    4. //Thư mục chứa file exe
    5. ofd.InitialDirectory = Application.ExecutablePath;
    6. ofd.ShowDialog();
    Bạn có thể xem thêm ở đây:
    CodeProject.com: Some Cool Tips for .NET

    Vấn đề 2 :
    Cho chương trình mở một file nhạc.
    Vậy mà khi mở file .wav thì báo lỗi.
    Nếu lấy links trong thư mục media của windows thì lại chạy được
    ?
    Mặc định của nó là .wav , vậy làm thế nào để nó chơi được .mp3 vậy?
    Windows Media Player Control giúp bạn giải quyết đc cái này.

  9. #29
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Cám ơn ntcuong
    Trích dẫn Nguyên bản được gửi bởi ntcuong Xem bài viết
    Visual C# Code:
    1. //Thư mục chứa file exe
    2. ofd.InitialDirectory = Application.ExecutablePath;
    Mình chỉ cần cái này ( đúng cái mình tìm rùi ^^!)

    Windows Media Player Control giúp bạn giải quyết đc cái này
    Uhm, ăn cơm xong mình test luôn. Vừa mới học về mệt wa.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  10. #30
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    [Thắc mắc 10]
    Vấn đề này, mình muốn hỏi về DataBase
    Vấn đề:
    1.Cài đặt VS 2k8, thì sever mặc định là gì vậy?
    Mình mở: data->modify connection...->data soure thì hiện lên :
    Code:
    - Microsoft Access Database File (OLE DB)
    - Microsoft SQL Server Compact 3.5 (.NET Framework Data Provider for Microsoft SQL Server Compact 3.5)
    -Microsoft SQL Server Database File (SqlClient)
    Vậy phải chọn cái nào?
    2. Mình có query, chỉnh sửa ... về cái
    Northwind.sdf
    Nhưng lại không biết chuỗi kết nối trong C# phải viết sao nữa để nó connect.
    Đang học theo chương trình của patê mà không kết nối được ^^!.
    Mình đang học gấp rút để làm bài tập lớn( bài đó mình nghĩ nên làm theo DB, nên tự học DB), cái DB thì kỳ tới mới được học cơ.
    Vui lòng giúp đỡ.
    Thanks.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn