none
執行序問題 RRS feed

  • 一般討論

  • public delegate void ChartControl(List<int> WaveValue,string[] uv);
    
    
       if (!this.Dispatcher.CheckAccess())
                    {
    this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),WaveValue,uv);
                    }
    
    public void DoChart(List<int> W,string[] uv)
    {
    ...................
    }

    一執行到this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),WaveValue,uv);
    就出現"參數數目不符。"的錯誤

    我將參數改成都只有一個或是this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),WaveValue,null);

    時都正常可是只要兩個都套參數就會出現這樣的錯誤
    請問是我哪裡做錯了嗎?


    2012年5月31日 上午 10:27

所有回覆

  • 您好,

    好像是因為您輸入的參數為null的關係哦!

    Error using Dispatcher.Invoke without parameters

    This is a manifestation of how any method that take params object[] as argument is treated. C# treats null value as NO argument. If you wanted to send null as the first argument then you need to send in object[]{null}. Like this.

    Dispatcher.Invoke((SendOrPostCallback)delegate
    {
    }, new object[]{null});


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年5月31日 下午 03:57
  • 您好

    我如果用

    this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),WaveValue,null);

    是會成功

    但是如果我將第二個參數值套入就會出現錯誤

    我也懷疑我的值可能有問題,所以自己在這行前面建一個

    string[] testuv = new string[]{"1","2"};

    然後

    this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),WaveValue,testuv );

    也有試過

    this.chart.Dispatcher.Invoke(DispatcherPriority.Normal, new ChartControl(DoChart),new object[]{WaveValue,testuv} );

    但一樣都會錯誤,所以很那悶到底問題出在哪裡= ="



    2012年5月31日 下午 04:11
  • 請問您有範例可供測試嗎?

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年6月1日 上午 01:37
  • 不好意思  因為時程關係  我先改成一參數了

    所以一時無法提供範例

    不過程式片段大概 就如下述

    a.cs中

    public delegate void ChartControl(List<int> WaveValue, string[] uv);
    public event ChartControl wave_event;
    private ........

    {

    wave_event(WaveValue, uv);

    }

    b.cs
    wave_event += new a.ChartControl(DoChart);

    private void DoChart(List<int> WaveValue,string[] uv)
            {
                if (!this.Dispatcher.CheckAccess())
                {
                    this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action<List<int>,string[]>(DoChart), new object[]{WaveValue,uv});
                }
                else
                {
                   .........
                }
            }

    另外可以請教一個問題嗎

    其實當初我是圖波資訊與數值資訊 分開不同的Dispatcher

    但因為圖波資訊過快導致兩個Dispatcher互相干擾

    又發現到Dispatcher居然沒有以往執行序會有的endinvoke作為結束

    想請教Dispatcher有辦法可以自行結束或是回收這個執行序嗎?

    2012年6月1日 上午 10:26