Implement a WPF app to list stock information that is loaded from StockData.csv. Your app should allow user to search specific company’s stock information, and display the search result in a DataGrid, and the result should be sorted according to the date. Clean the data by removing those rows where the price contains negative value while the data is loading.

Your app should also allow user to calculate the factorial of a positive integer entered by the user. Assume this factorial calculation activity to be an independent activity that has nothing to do with the stock data. The calculation of the factorial of the integer should not block user to interact with your app.

Hint: You may use asynchronous constructs to read and load data. You may use parallel programming constructs for cleaning and sorting the data.