代码之家  ›  专栏  ›  技术社区  ›  jimplode

使用WebBrowser控件的WPF设计注意事项

  •  0
  • jimplode  · 技术社区  · 14 年前

    我必须建立一个程序,使我可以跟踪从一个系统不同的触发点被击中。

    1. 关联方Id
    2. 触发器Id
    3. 参考代码

    我的程序是读取这些数据,并调用一个呼叫到附属网站的附属机构跟踪。

    所以我一直在尝试让它工作,我能想到的唯一方法是通过WPF或WinForms应用程序使用“WebBrowser”控件。

    我担心的是,由于web browser控件是异步的,在我要求web浏览器加载另一个跟踪代码片段之前,它可能不会处理javascript或图像请求。

    List<TRACKING_TRANSACTIONS> trackingTransactions = affiliateContext.TRACKING_TRANSACTIONS.Where(at => at.EFFECTIVE_DATE <= DateTime.Now && at.PROCESSED_DATE == null ).ToList();
    
    foreach (TRACKING_TRANSACTIONS transaction in trackingTransactions)
    {
    
        if (transaction != null)
        {
            AFFILIATE_TRIGGERS affiliateTrigger = affiliateContext.AFFILIATE_TRIGGERS.SingleOrDefault(at => at.AFFILIATE_ID == transaction.AFFILIATE_ID && at.TRIGGER_ID == transaction.TRIGGER_ID);
    
            if (affiliateTrigger != null)
            {
                //do replacements
                string trackingCode = ReplaceStringValues(affiliateTrigger.TRACKING_CODE, transaction);
    
                RunWebBrowserTrackingCode(trackingCode);//ConfigurationManager.AppSettings["WebsiteUrl"] + "?trackingTransactionId=" + transaction.TRACKING_TRANSACTION_ID.ToString());        
                Thread.Sleep(2000);
    
                transaction.PROCESSED_DATE = DateTime.Now;
    
                affiliateContext.SaveChanges();
            }
        }
    
    
    }
    

    void RunWebBrowserTrackingCode(string trackingCode)
    {
    
        if (!webBrowser.Dispatcher.CheckAccess())
        {
            webBrowser.Dispatcher.Invoke(
            System.Windows.Threading.DispatcherPriority.Normal,
                new Action(
                delegate()
                {
                    webBrowser.NavigateToString(trackingCode);
                }
            ));
        }
        else
        {
            webBrowser.NavigateToString(trackingCode);
        }
    }
    

    我主要关心的是 Thread.Sleep(2000);

    有人能提出更好的办法吗?我有没有用正确的技术来解决这个问题??

    1 回复  |  直到 14 年前