Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP错误(RPC_E_错误_线程)_C#_Multithreading_Uwp - Fatal编程技术网

C# UWP错误(RPC_E_错误_线程)

C# UWP错误(RPC_E_错误_线程),c#,multithreading,uwp,C#,Multithreading,Uwp,这个错误可能已经出现过很多次了,并且通过对代码进行一些更改以在UI线程而不是工作线程上运行特定的代码来避免。但在我的情况下,情况就不同了 问题: 在我的应用程序中,我无法实现增量加载,因为我尝试过,但每次都会失败,并且没有得到任何结果。所以我决定对GridViewscroll做同样的事情,所以我在GridView中获得了ScrollView,然后我将其与ViewChnaged绑定,当滚动结束时,我调用我的函数从互联网加载更多项目 大多数情况下,一切正常,但随后出现以下例外情况 应用程序调用了为不

这个错误可能已经出现过很多次了,并且通过对代码进行一些更改以在UI线程而不是工作线程上运行特定的代码来避免。但在我的情况下,情况就不同了

问题:

在我的应用程序中,我无法实现
增量加载
,因为我尝试过,但每次都会失败,并且没有得到任何结果。所以我决定对
GridView
scroll做同样的事情,所以我在
GridView
中获得了
ScrollView
,然后我将其与
ViewChnaged
绑定,当滚动结束时,我调用我的函数从互联网加载更多项目

大多数情况下,一切正常,但随后出现以下例外情况

应用程序调用了为不同线程封送的接口。(来自HRESULT的异常:0x8001010E(RPC_E_错误_线程))

我知道当UI元素从非UI线程(或者我还不知道的其他东西)更新时,会出现这种异常,但在过去,我可以通过专门从UI线程调用代码来避免这种情况。现在这样做也不起作用,因为不管我是从UI线程调用代码还是从工作线程调用代码,它都可以工作,有时它会发出
异常

这是我得到的
StackTrace
,异常的
来源是“Windows”
,但我不知道关于它的任何信息,也不知道它如何帮助我:

   at Windows.UI.Xaml.Controls.TextBlock..ctor()
   at   WatchfreeWebsite.MoviesPage.<>c__DisplayClass27_0.<<LoadHtmlDocument>b__0>d.MoveNext()
   --- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at WatchfreeWebsite.MoviesPage.<GridViewScroll_ViewChanged>d__21.MoveNext()
我的第2页:(电视节目页)

public TVShowsPage()
{
初始化组件();
NavigationCacheMode=NavigationCacheMode.Enabled;
this.Loaded+=TVShowsPage\u Loaded;
LoadHtmlDocument();
TVShowsList=新的ObservableCollection();
}
已加载私有void TVShowsPage_(对象发送方,路由目标)
{
sv=ViewHelper.FindVisualTreeObject(dataGrid).OfType().First();
sv.ViewChanged+=TVGridScroll\u ViewChanged;
}
私有异步void TVGridScroll_ViewChanged(对象发送方,ScrollViewServiceChangedEventArgs e)
{
var currentScroll=垂直偏移量;
var maxScroll=sv.ScrollableHeight;
如果(currentScroll==maxScroll)
{
var pBar=newprogressbar();
pBar.IsIndeterminate=真;
dataGrid.Footer=pBar;
//到达终点
尝试
{
等待加载HtmlDocument();
}
捕获(例外情况除外)
{
ErrorDialog(“加载数据时发生错误\n错误为:“+ex.HResult+”\n消息:“+ex.Message”);
}
}
}
私有任务加载HtmlDocument()
{
尝试
{
字符串url=“”;
返回任务。运行(异步()=>
{
如果(首次运行)
{
url=TVShowsBaseLink;
currentPageLink=TVShowsBaseLink;
等待Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
//#pragma警告禁用
lv.showsync();
//#pragma警告恢复
});
}
其他的
{
url=等待GetNextPageLink();
currentPageLink=url;
如果(url==“”| | url==null)
{
dataGrid.Footer=new TextBlock().Text=“未找到更多项。”;
lv.Hide();
返回;
}
}
var doc=新的HtmlDocument();
if(NetworkAvailable())
{
doc=等待新的HtmlWeb().LoadFromWebAsync(url);
}
其他的
{
doc=null;
lv.Hide();
返回;
}
如果(doc!=null)
{
链接(doc);
}
});
}
捕获(例外情况除外)
{
ErrorDialog(“下载网页时出错”+ex.Message);
返回null;
}
}
专用异步无效标题(HtmlDocument文档)
{
尝试
{
foreach(doc.DocumentNode.subjects(“a”)中的var链接,其中(t=>t.Attributes.Contains(“title”))
{
if(link!=null&&link.InnerText!=“WatchFree.to”&&link.InnerText!=“电影”&&link.InnerText!=“电视节目”)
{
字符串x=link.GetAttributeValue(“title”,null);
x=x.替换(“手表存放柜”);
x=x.Trim();
x=newregex(@“(\(\d{4}\)(?:\s*\1)+”)。替换(x,“$1”)。Trim();
TVShowsTitles[numberOfTitles]=x;
numberOfTitles++;
如果(numberOfTitles==numberOfLinks)
{
打破
}
}
}
等待Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
TVShowsList=ItemManager.GetTVShowsCollection(lastListItems,numberOfLinks,type);
Bindings.Update();
lv.Hide();
TextBlock a=新的TextBlock();
a、 水平对齐=水平对齐.居中;
dataGrid.Header=a.Text=“电视节目”;
});
lastListItems=numberOfLinks;
firstRun=false;
}
捕获(例外情况除外)
{
ErrorDialog(“获取电影标题时出现问题。\n”+ex.Message);
}
}
私有无效图像链接(HtmlDocument文档)
public MoviesPage()
    {
        InitializeComponent();
        NavigationCacheMode = NavigationCacheMode.Enabled;
        LoadHtmlDocument();
        MoviesList = new ObservableCollection<ItemsClass>();
        this.Loaded += MoviesPage_Loaded;
    }

    private void MoviesPage_Loaded(object sender, RoutedEventArgs e)
    {
        sv = ViewHelper.FindVisualTreeObject(dataGrid).OfType<ScrollViewer>().First();
        sv.ViewChanged += GridViewScroll_ViewChanged;
    }
private async void GridViewScroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {
        var currentScroll = sv.VerticalOffset;
        var maxScroll = sv.ScrollableHeight;
        if (currentScroll == maxScroll)
        {
            var pBar = new ProgressBar();
            pBar.IsIndeterminate = true;
            dataGrid.Footer = pBar;
            // end reached
            try
            {
                await LoadHtmlDocument();
            }
            catch (Exception ex)
            {
                ErrorDialog("Something happened while loading data\nThe Error is: " + ex.HResult + "\nMessage: " + ex.Message);
            }
        }
    }
public Task LoadHtmlDocument()
    {
        try
        {
            string url = "";
            return Task.Run(async () =>
            {
                if (firstRun) // first page
                {
                    url = MoviesBaseLink;
                    currentPageLink = MoviesBaseLink;
                    await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                    () =>
                    {
//#pragma warning disable
                        lv.ShowAsync();
//#pragma warning restore
                    });
                }
                else
                {
                    url = await GetNextPageLink();
                    currentPageLink = url;
                    if (url == "" || url == null)
                    {
                        TextBlock a = new TextBlock();
                        a.Text = "No more items found.";
                        dataGrid.Footer = a.HorizontalAlignment = HorizontalAlignment.Center; 
                        lv.Hide();
                        return;
                    }
                }

                var doc = new HtmlDocument();
                if (NetworkAvailable())
                {
                    doc = await new HtmlWeb().LoadFromWebAsync(url);
                }
                else
                {
                    doc = null;
                    lv.Hide();
                    return;
                }
                if (doc != null)
                {
                    Links(doc);
                }
            });

        }
        catch (Exception ex)
        {
            ErrorDialog("MoviesDoc_Download_Failed" + ex.Message);
            return null;
        }
    }

    private void Links(HtmlDocument doc)
    {
        try
        {
            listItems = 0;
            foreach (var link in doc.DocumentNode.Descendants("a").Where(pl => pl.Attributes.Contains("href")))
            {
                string dataValue = link.GetAttributeValue("href", "");
                if (dataValue.StartsWith("/watch") && dataValue.EndsWith(".html"))
                {
                    MoviesPageLinks[numberOfLinks] = MoviesBaseLink + dataValue.Trim();
                    listItems++;
                    numberOfLinks++;
                }
                if (numberOfLinks > 9999)
                {
                    break;
                }
            }
            ImageLinks(doc);
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem while acquiring search links.\n" + ex.Message);
        }
    }

    private void ImageLinks(HtmlDocument doc)
    {
        try
        {
            foreach (var link in doc.DocumentNode.Descendants("img").Where(d => d.Attributes.Contains("src")))
            {
                if (link != null)
                {
                    if (link.Attributes["src"].Value == "/images/noposter.jpg")
                    {
                        MoviesImageLinks[numberOfImages] = @"ms-appx:///Assets/noposter.jpg";
                    }
                    else
                    {
                        MoviesImageLinks[numberOfImages] = string.Format("http:{0}", link.Attributes["src"].Value);
                    }
                    numberOfImages++;
                }
                if (numberOfImages == numberOfLinks)
                {
                    break;
                }
            }
            Titles(doc);
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem in Image links.\n" + ex.Message);
        }
    }

    private async void Titles(HtmlDocument doc)
    {
        try
        {
            foreach (var link in doc.DocumentNode.Descendants("a").Where(t => t.Attributes.Contains("title")))
            {
                if (link != null && link.InnerText != "WatchFree.to" && link.InnerText != "Movies" && link.InnerText != "TV Shows")
                {
                    string x = link.GetAttributeValue("title", null);
                    x = x.Replace("Watch Putlocker", "");
                    x = x.Trim();
                    x = new Regex(@"(\(\d{4}\))(?:\s*\1)+").Replace(x, "$1").Trim();
                    MoviesTitles[numberOfTitles] = x;
                    numberOfTitles++;
                    if (numberOfTitles == numberOfLinks)
                    {
                        break;
                    }
                }
            }
            await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
            () =>
            {
                MoviesList = ItemManager.GetMovieCollection(lastListItems, numberOfLinks, type);
                this.Bindings.Update();
                dataGrid.Footer = null;
                TextBlock b = new TextBlock();
                b.HorizontalAlignment = HorizontalAlignment.Center;
                dataGrid.Header = b.Text = "Recent Movies";
                lv.Hide();

            });
            lastListItems = numberOfLinks;
            firstRun = false;
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem while acquiring movie titles.\n" + ex.Message);
        }
    }
private async Task<string> GetNextPageLink()
    {
        string lastLink = "";
        string nextPageLink = "";
        var doc = await new HtmlWeb().LoadFromWebAsync(currentPageLink);
        foreach (var link in doc.DocumentNode.Descendants("a").Where(t => t.Attributes.Contains("href")))
        {
            string value = link.GetAttributeValue("href", "");
            if (value.Contains("/?page=" + nextPage))
            {
                nextPageLink = value;
                lastLink = value;
                break;
            }
        }
        //--------------------------------------
        if (nextPageLink != "" && nextPageLink == lastLink)
        {
            nextPageLink = MoviesBaseLink + lastLink;
            nextPage++;
        }

        return nextPageLink;
    }
public TVShowsPage()
    {
        InitializeComponent();
        NavigationCacheMode = NavigationCacheMode.Enabled;
        this.Loaded += TVShowsPage_Loaded;
        LoadHtmlDocument();
        TVShowsList = new ObservableCollection<ItemsClass>();
    }

    private void TVShowsPage_Loaded(object sender, RoutedEventArgs e)
    {
        sv = ViewHelper.FindVisualTreeObject(dataGrid).OfType<ScrollViewer>().First();
        sv.ViewChanged += TVGridScroll_ViewChanged;
    }

    private async void TVGridScroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {
        var currentScroll = sv.VerticalOffset;
        var maxScroll = sv.ScrollableHeight;
        if (currentScroll == maxScroll)
        {
            var pBar = new ProgressBar();
            pBar.IsIndeterminate = true;
            dataGrid.Footer = pBar;
            // end reached
            try
            {
                await LoadHtmlDocument();
            }
            catch (Exception ex)
            {
                ErrorDialog("Something happened while loading data\nThe Error is: " + ex.HResult + "\nMessage: " + ex.Message);
            }
        }
    }
private Task LoadHtmlDocument()
    {
        try
        {
            string url = "";
            return Task.Run(async () =>
            {
                if (firstRun)
                {
                    url = TVShowsBaseLink;
                    currentPageLink = TVShowsBaseLink;
                    await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                    () =>
                    {
//#pragma warning disable
                        lv.ShowAsync();
//#pragma warning restore
                    });
                }
                else
                {
                    url = await GetNextPageLink();
                    currentPageLink = url;
                    if (url == "" || url == null)
                    {
                        dataGrid.Footer = new TextBlock().Text = "No more items found.";
                        lv.Hide();
                        return;
                    }
                }
                var doc = new HtmlDocument();
                if (NetworkAvailable())
                {
                    doc = await new HtmlWeb().LoadFromWebAsync(url);
                }
                else
                {
                    doc = null;
                    lv.Hide();
                    return;
                }
                if (doc != null)
                {
                    Links(doc);
                }
            });
        }
        catch (Exception ex)
        {
            ErrorDialog("Error_Downloading_WebPage\n" + ex.Message);
            return null;
        }
    }

    private async void Titles(HtmlDocument doc)
    {
        try
        {
            foreach (var link in doc.DocumentNode.Descendants("a").Where(t => t.Attributes.Contains("title")))
            {
                if (link != null && link.InnerText != "WatchFree.to" && link.InnerText != "Movies" && link.InnerText != "TV Shows")
                {
                    string x = link.GetAttributeValue("title", null);
                    x = x.Replace("Watch Putlocker", "");
                    x = x.Trim();
                    x = new Regex(@"(\(\d{4}\))(?:\s*\1)+").Replace(x, "$1").Trim();
                    TVShowsTitles[numberOfTitles] = x;
                    numberOfTitles++;
                    if (numberOfTitles == numberOfLinks)
                    {
                        break;
                    }
                }
            }
            await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
            () =>
            {
                TVShowsList = ItemManager.GetTVShowsCollection(lastListItems, numberOfLinks, type);
                Bindings.Update();
                lv.Hide();
                TextBlock a = new TextBlock();
                a.HorizontalAlignment = HorizontalAlignment.Center;
                dataGrid.Header = a.Text = "TV Shows";
            });
            lastListItems = numberOfLinks;
            firstRun = false;
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem while acquiring movie titles.\n" + ex.Message);
        }
    }

    private void ImageLinks(HtmlDocument doc)
    {
        try
        {
            foreach (var link in doc.DocumentNode.Descendants("img").Where(d => d.Attributes.Contains("src")))
            {
                if (link != null)
                {
                    if (link.Attributes["src"].Value == "/images/noposter.jpg")
                    {
                        TVShowsImageLinks[numberOfImages] = @"ms-appx:///Assets/noposter.jpg";
                    }
                    else
                    {
                        TVShowsImageLinks[numberOfImages] = string.Format("http:{0}", link.Attributes["src"].Value);
                    }
                    numberOfImages++;
                }
                if (numberOfImages == numberOfLinks)
                {
                    break;
                }
            }
            Titles(doc);
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem in Image links.\n" + ex.Message);
        }
    }

    private void Links(HtmlDocument doc)
    {
        try
        {
            listItems = 0;
            foreach (var link in doc.DocumentNode.Descendants("a").Where(pl => pl.Attributes.Contains("href")))
            {
                string dataValue = link.GetAttributeValue("href", "");
                if (dataValue.StartsWith("/watch") && dataValue.EndsWith(".html"))
                {
                    TVShowsPageLinks[numberOfLinks] = MoviesPage.MoviesBaseLink + dataValue.Trim();
                    numberOfLinks++;
                    listItems++;
                }
                if (numberOfLinks > 9999)
                {
                    break;
                }
            }
            ImageLinks(doc);
        }
        catch (Exception ex)
        {
            ErrorDialog("There was a problem while acquiring search links.\n" + ex.Message);
        }
    }
 private async Task<string> GetNextPageLink()
    {
        string lastLink = "";
        string nextPageLink = "";
        var doc = await new HtmlWeb().LoadFromWebAsync(currentPageLink);
        foreach (var link in doc.DocumentNode.Descendants("a").Where(t => t.Attributes.Contains("href")))
        {
            string value = link.GetAttributeValue("href", "");
            if (value.Contains(@"=&page=" + nextPage))
            {
                lastLink = value;
                nextPageLink = value;
                break;
            }
        }
        //--------------------------------------
        if (nextPageLink != "" && nextPageLink == lastLink)
        {
            nextPageLink = MoviesPage.MoviesBaseLink + lastLink;
            nextPage++;
        }
        return nextPageLink;
    }