none
在 event 區中開 form 程式會掛掉 RRS feed

  • 一般討論

  • 我宣告了一個 Event 如下
    我想在接到 event 時跳一個視窗
    可是 加了如下
    程式就 Hold 住沒反應了 
    要怎麼寫啊~~~
     #region "push 事件區"
            private void QuoteArriveWorking(int ObjNo, object obj)
            {
                Form1 frm=new Form1();
                frm.show();
               .........
               ........
             }
      #endregion
    • 已變更類型 Lolota Lee 2009年10月22日 上午 09:15 發未者未繼續回覆
    2009年10月15日 上午 06:38

所有回覆

  • 將 frm.show(); 改成 frm.ShowDialog(); 看看
    Windows 7 多點觸控設計大賽
    2009年10月15日 上午 06:48
    版主
  • 將 frm.show(); 改成 frm.ShowDialog(); 看看
    Windows 7 多點觸控設計大賽

    更慘呢
    關閉 視窗後 出現
    "復原作業的內容與套用至對應設定作業的內容不同。可能是因為內容已設定在執行緒上,但沒有還原 (復原)"

    請問一下在 宣告的Event中 可以這樣呼叫 Form 嘛
    2009年10月15日 上午 06:52
  • 2009年10月15日 上午 06:58
    版主
  • 其實  我之前也有用 delgate 寫過  可是  跳出來一堆視窗  都變成沒回應
    唉  真的不知 該怎麼下手
    2009年10月15日 上午 07:04
  • 怎麼從頭到尾都沒看到你講的event..........

    2009年10月15日 上午 07:48
  • 多執行續或是非同步呼叫因為執行時已不在UI thread內,是無法操作UI的.你必須切回UI Thread方式有很多,譬如控制項的Control.Invoke方法.
    或是如WPF或Silverlight應用程式中DependencyObject有Dispatcher屬性的BeginInvoke.


    至於原因可以參考侯傑的Win32多緒程式(學MultiThread這本書很重要).

    下面連結有個範例
    http://msdn.microsoft.com/en-us/library/ms951089.aspx

    2009年10月15日 上午 07:55
  • 怎麼從頭到尾都沒看到你講的event..........


     #region "push 事件區"
            private void QuoteArriveWorking(int ObjNo, object obj)
            {
                Form1 frm=new Form1();
                frm.show();
               .........
               ........
             }
      #endregion

    以上的method 就是 我宣告的 event
    有沒有人 可以 比較確切告訴 該怎麼處理 frm.show 在 這個 event method 中呢?!
    2009年10月15日 上午 08:12
  • 謝謝   看了 大概知道你的意思  但  還是不太知道 怎麼解決這個問題
    2009年10月15日 上午 08:13
  • Hi,

    您的問題我覺得還很模糊
    一來事件是可以拿來控制表單的
    二來跨執行緒好像也不會當住

    而您的事件處理函式長的也怪怪的
    說不定您的事件跟我們想的是不同的東西
    能的話請附上該事件處理函式與事件繫上那部份的程式
    還有這段Code所在的類別也標示清楚點

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年10月15日 上午 10:21

  •  #region "push 事件區"
            private void QuoteArriveWorking(int ObjNo, object obj)
            {
                Form1 frm=new Form1();
                frm.show();
               .........
               ........
             }
      #endregion

    以上的method 就是 我宣告的 event
    有沒有人 可以 比較確切告訴 該怎麼處理 frm.show 在 這個 event method 中呢?!
    我覺得你恐怕是誤解了 "事件宣告" 的意義. 你這個內容看起來像引發事件後的程式內容, 而不是宣告一個事件
    建議你先看看 MSDN文件庫以下的章節
    [HOW TO:將事件加入至類別 ]
    [逐步解說:宣告和引發事件 ]
    [HOW TO:撰寫事件處理常式 ]


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    2009年10月16日 上午 03:37
    版主
  • HI,

    您的Form1顯示出來後有沒有做什麼事?
    2009年10月16日 上午 03:54

  •  #region "push 事件區"
            private void QuoteArriveWorking(int ObjNo, object obj)
            {
                Form1 frm=new Form1();
                frm.show();
               .........
               ........
             }
      #endregion

    可以請問你程式中的  .......  是什麼嗎? 
    萬丈高樓平地起,只要有心不艱辛
    2009年10月16日 上午 05:35
  • 如果event是從新new 的Thread中Trigger出來的話就會照成這樣問題。
    我解決方法是:


            private void QuoteArriveWorking(int ObjNo, object obj)
            {

               
               Thread newThread=new Thread(new ThreadStart(newThreadStart));
               newThread.Start();

                
               .........
               ........
             }
            private void newThreadStart()
           {
            Form1 frm=new Form1();
            Application.Run(frm);
           }
    這是個人用的方法...如有其他方法可以交流一下

    2009年10月24日 上午 08:32