这可能是一个非常愚蠢的问题,但我有以下编码行将RAW图像转换为BitmapImages:
public async void CreateImageThumbnails(string imagePath, int imgId)
{
await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
Run Code Online (Sandbox Code Playgroud)
它调用这种方法 CreateThumbnail()
public static BitmapImage CreateThumbnail(string imagePath)
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
{
bitmap.BeginInit();
bitmap.DecodePixelWidth = 283;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
bitmap.Freeze();
GC.WaitForPendingFinalizers();
GC.Collect();
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
当使用async Void而不是async Task在我的CreateImageThumbnails方法中时,我的应用程序处理图像(其中29个)比快11秒async Task.为什么会这样?
内存使用更加使用void,但操作完成多快.我对线程知之甚少,这就是我提出这个问题的原因.有人可以解释为什么会这样吗?
我还做了一些关于什么时候和什么时候不使用的研究 …
我想知道如何只允许数字和文本框中的" - "减号?
这是编码,我只能允许数字:
private void txtDicountSettlement_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9]+");
e.Handled = regex.IsMatch(e.Text);
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个新列,然后在按钮单击事件上仅向该新列添加值.那可能吗?该列可能在其下方有几行,具体取决于报价中的项目数量.
到目前为止我取得的成就:
我的班级,我的所有信息都存储在其中
public class ViewQuoteItemList
{
...
public double SupplierCost { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我可以创建我的列并将其绑定到我的ViewQuoteItemList类
DataGridTextColumn columnFeedbackSupplier = new DataGridTextColumn();
columnFeedbackSupplier.Binding = new Binding("SupplierCost");
//The header of the column gets it's value from a combobox where you select a company to be added to the datagrid
columnFeedbackSupplier.Header = (cmbFeedbackSelectSupplier.SelectedItem as DisplayItems).Name;
Run Code Online (Sandbox Code Playgroud)
从这里我从不同的数据网格中获取我的引用项目,然后将它们添加到我的第二个数据网格中,我想在其中添加新列及其值
IList list = dgFeedbackAddCost.SelectedItems as IList;
IEnumerable<ViewQuoteItemList> items = list.Cast<ViewQuoteItemList>();
var collection = (from i in items
let a = new …Run Code Online (Sandbox Code Playgroud) 我正在寻找以下Excel公式的C#等价物:
(INT(((4800/1000)/0.415)*2.393)/0.05)
Run Code Online (Sandbox Code Playgroud)
我540在Excel中使用上面的公式获得了值,但现在我尝试使用以下代码在C#中执行相同的操作:
Math.Round((((4800 /1000) / 0.415) * 2.393) / 0.05, 0)
Run Code Online (Sandbox Code Playgroud)
我得到了价值553.
如何使用C#编码获得相同的值?
我正在尝试从我的WPF应用程序中的子窗口关闭我的主窗口.问题是,一旦我试图"关闭"主窗口,我的整个应用程序就会关闭.
这是我的主窗口(pgLogin)的编码:
Window nextWindow = null;
nextWindow = new pgDashboard();
nextWindow.Owner = this;
this.Hide();
nextWindow.Show();
Run Code Online (Sandbox Code Playgroud)
和我的孩子窗口(pgDashboard):
public static T IsWindowOpen<T>(string name = null) where T : Window
{
var windows = Application.Current.Windows.OfType<T>();
return string.IsNullOrEmpty(name) ? windows.FirstOrDefault() : windows.FirstOrDefault(w => w.Name.Equals(name));
}
private void HAZEDashboard_Loaded(object sender, RoutedEventArgs e)
{
var credentials = this.Owner as pgLogin;
credentials.txtEmailAddress.Text.ToString();
var window = IsWindowOpen<pgLogin>();
if (window != null)
{
window.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法关闭主窗口而不隐藏它仍然保持打开我的孩子窗口?
我试图将文件(BitmapImage)保存到某个位置,但是一旦我使用async&await我得到一个错误,说该文件正在使用中:
该进程无法访问文件'C:\ Users\...\image1.jpg',因为它正由另一个进程使用.
我的编码:
BitmapImage image = new BitmapImage(new Uri(oldImagePath));
var encoder = new JpegBitmapEncoder() { QualityLevel = 17 };
encoder.Frames.Add(BitmapFrame.Create(image));
using (var filestream = new FileStream(GetImageLocation(), FileMode.Create))
await Task.Run(() => encoder.Save(filestream)); //Error here
Run Code Online (Sandbox Code Playgroud)
当我使用的代码没有了await,代码工作完全正常.我想这可能是因为另一个线程可能正在使用它,但任何人都可以帮助或向我解释我的问题吗?谢谢.
我正在学习更多关于使用ICommand接口以及如何通过RelayCommand我创建的类执行命令.
首先,我对我想要实现的目标进行了一些研究,但是我找不到任何可以帮助我的东西,或者我真的不知道如何搜索我想要做的事情.另外,我对C#理论的了解并不是很好,所以这对我也不利.
基本上我正在尝试将多个动作发送到我的RelayCommand构造函数,然后遍历List<Action<object>>集合中的所有动作并逐个执行它们.这是我的代码:
RelayCommand类构造函数
public RelayCommand(Predicate<object> canExecute, List<Action<object>> actions)
{
_canExecute = canExecute;
foreach (var action in actions)
_execute = action;
}
Run Code Online (Sandbox Code Playgroud)
然后我的ViewModel中的命令属性
private ICommand _updateExternals;
public ICommand UpdateExternals
{
get
{
if (_updateExternals == null)
{
_updateExternals = new RelayCommand(
x => CanExecute,
Updater.UpdateExternals(this));//Here is where I am stuck
}
return _updateExternals;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,从其他示例来看,如果我只需要传递单个Action而不是一个Actions列表,那么代码将如下所示:x => Updater.UpdateExternals(this));它会起作用,但只要我有一个Actions列表作为参数我卡住了
所以,如果您还没有猜到,我的问题是:如何通过多个动作发送到我的RelayCommand类?
任何正确方向的帮助将不胜感激,谢谢!
编辑:这是我完整的RelayCommand类,可以更好地了解我在做什么.
public class RelayCommand : …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查标签的值是否等于null, " ", string.Empty,但每次我运行编码时,都会收到以下错误:
你调用的对象是空的.
这是我的编码:
if (lblSupplierEmailAddress.Content.ToString() == "") //Error here
{
MessageBox.Show("A Supplier was selected with no Email Address. Please update the Supplier's Email Address", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
Run Code Online (Sandbox Code Playgroud)
如何检查标签内的字符串值是否等于null?我可能会遗漏一些简单的东西,如果是这样,请忽略我的无能:P
是否有可能设置手动启动位置在XAML WPF窗口中启动右下角屏幕一角?我可以在代码隐藏区中进行操作,但是当窗口打开时,它会在手动位置(屏幕的左中角)弹出,然后跳到屏幕的右下角,看起来不太好。
我可以使用以下代码在XAML的角的左上角设置位置:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="500" Width="500"
WindowStartupLocation="Manual"
Left="0" Top="0">
</Window>
Run Code Online (Sandbox Code Playgroud)
我可以使用XAML编码对屏幕的右下角执行相同的操作以适合任何屏幕尺寸吗?
我正在尝试将我的课程转换AllStock为,ObservableCollection<AllStock> stockList但出现以下错误:
'System.Collections.ObjectModel.Collection.Add(Haze.AllStock)' 的最佳重载方法匹配有一些无效参数
这是我的编码:
我创建了我的 Observable 集合 -
private ObservableCollection<AllStock> _stockList;
public ObservableCollection<AllStock> stockList
{
get
{
if (_stockList == null)
_stockList = new ObservableCollection<AllStock>();
return _stockList;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的方法里面 -
var allStock = await service.GetSysproStockAsync();
var stock = allStock.Select(x =>
new AllStock
{
Id = x.Id,
...
MaterialThickness = x.MaterialThickness
});
stockList.Add(stock); //Error here - I want to add my 'var stock' to my ObservableCollection
dgSysproStock.ItemsSource = stockList;
Run Code Online (Sandbox Code Playgroud)
为什么会抛出这个错误?
我需要一些有关如何在下面的代码片段中将此字符串设置为null值的信息.
[Index(IsUnique = true)]
[StringLength(450)]
public string StockCode
{
get { return _stockCode; }
set { _stockCode = value.ToUpper(); } //(ToUpper)<<-- Error
}
Run Code Online (Sandbox Code Playgroud)
当我尝试以正常方式执行此操作时,public string? StockCode我得到了错误,.ToUpper并说:
'System.Nullable'不包含'ToUpper'的定义,并且没有扩展方法'ToUpper'可以找到接受类型'System.Nullable'的第一个参数(你是否缺少using指令或汇编引用?)
我不是专家或专业C#编码器,所以我不知道如何将我的字符串设置为空值并仍然使用.ToUpper我试图这样做的方式.:( 任何意见,将不胜感激!