Tag: winforms

在另一个AppDomain中调用Await时没有SynchronizationContext

我已经成功构建了一个插件机制,我可以在单独的AppDomain中创建UI控件,并将它们显示为主AppDomain中Form的一部分。 这些UI控件执行自己的数据加载,因此当我打开表单时,会创建大约10个不同的插件,并且每个插件都需要加载其数据。 如果我同步执行此操作,这一切都可行,但我想在每个插件中使用async / await模式。 我的刷新方法如下所示: protected async void RefreshData() { _data = await LoadAsync(_taskId); <= UI Thread 🙂 OnDataChanged(); <= Worker Thread 🙁 } 现在开始这个问题。 当我输入这个方法时,我在主UI线程上。 但是当await结束时,我在一个工作线程上,所以我在OnDataChanged()方法中得到了一个交叉线程exception,它更新了控件。 await应该默认使用SynchronizationContext.Current来继续,但由于我在另一个AppDomain中,这恰好是NULL。 所以我的问题是。 如何配置await继续当前线程,即UI线程? 我知道我可以获取一个控件并执行Invoke(),但我也使用MVVM模式,这是在View模型中,因此我无法访问任何控件,所有View Model – > View通信都是通过数据完成的绑定。

创建下载加速器

我指的是使用C#来理解文件下载。 代码使用传统方法来读取Stream之类的 ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0 如何将要下载的文件分成多个段,以便我可以并行下载单独的段并合并它们? using (WebClient wcDownload = new WebClient()) { try { // Create a request to the file we are downloading webRequest = (HttpWebRequest)WebRequest.Create(txtUrl.Text); // Set default authentication for retrieving the file webRequest.Credentials = CredentialCache.DefaultCredentials; // Retrieve the response from the server webResponse = (HttpWebResponse)webRequest.GetResponse(); // Ask […]

将csproj文件从winform转换为wpf

我有一个Winform应用程序,有一个非常简单的forms,program.cs主文件和大约60个后端.cs文件。 我想将项目转换为WPF应用程序。 看这里没有显示任何接近我想做的事情。 我需要 转换csproj文件,这样我就可以添加WPF窗口了 转换要“就地”完成,以保持我的源代码控制整洁,避免将所有后端文件添加回适当文件夹的麻烦,添加对外部依赖项的引用等。 创建一个空的mainwindow.xaml(+ .cs)文件,我将手动填充相应的控件。 然后,我将在视图和viewmodel文件之间手动拆分旧表单文件的内容。 有什么方法比从头开始更容易? 编辑:我宁愿不将新的WPF ui托管到旧的winforms shell中,而是用wpf替换当前的表单应用程序。 编辑2:我不想将整个项目和架构转换为WPF(因为它被问及在SO上多次回答),我完全理解这些是2个不同的框架,我完全愿意手动进行更改。 我想转换csproj所以它将编译为WPF应用程序而不是Forms应用程序。

如何在多显示器环境中轻松找到表格位置的屏幕位置?

在多监视器环境中运行的C#winform应用程序(桌面跨2或3个监视器),Form的Location属性表示表单在跨区桌面上的位置,而不是物理屏幕上表单的位置。 是否有一种简单的方法可以在屏幕坐标中找到表单的位置,以及表单所在的屏幕? 因此,如果表单位于第2或第3个显示的左上角,则位置为(0,0)?

图表标记没有出现在线上

因此,我使用Windows窗体图生成包含多行的图形,这些图形可能会在图形上产生一些混乱,除了颜色之外还需要区分它们。 使用点线或虚线的点太多,因为它与实线之间没有可观察到的差异。 所以我希望做的是获得各种形状的标记,例如在Excel中显示。 现在我有这样编码 myChart.Series[“MySeries”].ChartType = SeriesChartType.FastLine; myChart.Series[“MySeries”].MarkerStyle = MarkerStyle.Diamond; 它的作用是在该线上的图例中放置一颗钻石,但它不会将钻石放在图表本身的实际线上。 遗憾的是,更改标记大小并没有什么不同,也没有改变标记颜色。 有没有办法让这种情况发生。 感谢阅读,以及任何帮助。 编辑:下面是相关的代码。 它的数据保存在一个类中,这是一个字典的价值。 该类包含双精度列表。 public void Charter(Color colorOfLine) { double xValue; double yValue; myChart.Series.Add(“MySeries”); myChart.Series[“MySeries”].ChartType.FastLine; myChart.Series[“MySeries”].ChartArea = “ChartArea1”; myChart.Series[“MySeries”].Color = colorOfLine; myChart.Series[“MySeries”].MarkerStyle = MarkerStyle.Diamond; myChart.Series[“MySeries”].MarkerColor = Color.Black; myChart.Series[“MySeries”].MarkerSize = 5; myChart.Series[“MySeries”].MarkerBoarderColor = Color.DeepPink; foreach (KeyValuePair Pair in MyDictionary) { xValue = Pair.Value.MyClassList[0]; […]

‘禁用’C#中TextBox的MaxLength属性

我目前正在开发一个Windows窗体应用程序,我需要一个TextBox,它不会将输入大小限制为Int32.MaxValue 。 问题是MaxLength是TextBox上的Int32属性,我当然不能设置一个大于它的值的数字。 理想情况下,我根本不想设置任何数字并完全“禁用”此检查。 我有没有办法让TextBox不限制输入大小?

如何在不写入文件的情况下获取DataVisualization.Charting.Chart到iTextSharp.text.Image的图像?

我正在编写一个用于可视化测量数据的软件。 为此,我使用System.Windows.Forms.DataVisualization.Charting.Chart,我知道我可以通过chartObj.SaveImage获取显示的图像,以将其存储到文件中。 我的软件应有PDF导出,其中应包含图片。 为此,我正在使用iTextSharp。 同样,我知道如何通过iTextSharp.text.Image.GetInstance将我存储在文件中的图片放入PDF中。 所以到现在为止,我可以拍摄图表的图片,将其放入文件(例如.jpg文件)并再次加载此文件以将其放入我的PDF中。 现在我正在寻找一个很好的解决方案,将图片放入PDF而不将其存储到文件中,可能通过Stream或类似的东西。 我已经尝试了很长时间,但直到现在我还没有成功。 我想到了类似的东西 Stream imageStream = image of chartObj; iTextSharp.text.Image picture = iTextSharp.text.Image.GetInstance(imageStream); 据我所知,我无法将chartObj中的图片放入Stream而不是文件中。 如果我有这个,我想我可以通过iTextSharp.text.Image.GetInstance加载Stream。 有没有人可以提供一些帮助? 猜猜不是那么难,但我是C#和iText的新手,所以我只是有点卡在这里。 提前感谢您对此的每一个想法! 安娜

Windows窗体触发事件

我正在创建一个Windows窗体应用程序,它有几个可点击的面板,需要触摸屏相当于鼠标向下和向上事件。 当我使用键盘和鼠标进行测试时,事件被正确触发,应用程序会按预期做出反应。 但是,当在触摸屏上进行测试时则不然。 唯一可以正常工作的事件是click事件,但我的应用程序需要鼠标按下事件才能持续更新值。 有没有人遇到这样的问题,并找到了解决方案?

可以处理HTTPS的WebBrowser控件

我正在寻找.NET中可以处理HTTPS的WebBrowser控件的替代品。 此问题在Stack Overflow上类似,但这些控件都不提供HTTPS。 顺便提一下,我尝试了所有这些 GeckoFx – 开发停止了 Se7en – 这实际上是继续GeckoFx Webkitdotnet – 没有人在论坛上回复 但它们都不支持HTTPS,所以我有点卡在这里:/。 另外,提到.NET框架附带的WebBrowser控件可以很好地使用HTTPS,但我无法使用它的原因是因为我的应用程序使用了很多 IE拒绝呈现的javascript,例如Firefox(壁虎引擎) )或Chrome(webkit)工作正常。 所以,如果有人知道可以做到这一点的良好控件(可以是Webkit或Gecko包装器,它不介意,只要它不是IE包装器)。 谢谢!

如何在运行时在WinForm中添加按钮?

我有以下代码: public GUIWevbDav() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { try { //My XML Loading and other Code Here //Trying to add Buttons here if (DisplayNameNodes.Count > 0) { for (int i = 0; i < DisplayNameNodes.Count; i++) { Button folderButton = new Button(); folderButton.Width = 150; folderButton.Height = 70; folderButton.ForeColor = […]