我正在创建一个自定义控件,其中一部分是使用Graphics类来向表单绘制文本.目前我正在使用以下代码来显示它:
private float _lineHeight { get { return this.Font.Size + 5; } }
private void Control_Paint(object sender, PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
Brush b = new SolidBrush(Colors[7]);
g.DrawString("Hello World!", this.Font, b, 0, 2);
g.DrawString("This has been a test of the emergency drawing system!",
this.Font, b, 0, 2 + _lineHeight);
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用固定宽度字体,我想知道字体显示的宽度,但似乎没有这种信息的任何属性.有没有办法获得它?我想要它所以我可以在显示时正确包裹线条.
给出以下代码:
using System.Collections.Generic;
static class Program {
static void Main() {
bar Bar = new bar();
baz Baz = new baz();
System.Console.WriteLine(
"We have {0} bars, rejoice!", bar.Cache.Count);
}
}
public abstract class foo {
public static List<foo> Cache = new List<foo>();
}
public class bar : foo {
public bar() { Cache.Add(this); }
}
public class baz : foo {
public baz() { Cache.Add(this); }
}
Run Code Online (Sandbox Code Playgroud)
你得到(有点预期)输出"我们有2个酒吧,欢喜!".
这真是太棒了,我们现在拥有啤酒的两倍(显然),但我真正想要的是每个类都拥有它自己的缓存.我不想在子类中实现此缓存的原因是因为我的抽象类中还有一些方法需要能够在缓存上操作(即迭代所有这些方法).有没有办法做到这一点?我已经看过使用接口foo,但接口不允许将静态成员定义为接口的一部分.
基本上,根据我对小网的了解,我设法在互联网上搜索,线程可以在AppDomains之间传递.现在,我编写了以下代码:
const string ChildAppDomain = "BlahBlah";
static void Main()
{
if (AppDomain.CurrentDomain.FriendlyName != ChildAppDomain)
{
bool done = false;
while (!done)
{
AppDomain mainApp = AppDomain.CreateDomain(ChildAppDomain, null, AppDomain.CurrentDomain.SetupInformation);
try
{
mainApp.ExecuteAssembly(Path.GetFileName(Application.ExecutablePath));
}
catch (Exception ex)
{
// [snip]
}
AppDomain.Unload(mainApp);
}
}
else
{
// [snip] Rest of the program goes here
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,一切都在点击...主线程进入我的程序的新版本,并开始在主应用程序正文中运行.我的问题是,如何才能让它回到父母身边AppDomain?这可能吗?我想要实现的是在两个域之间共享一个类的实例.
对于具有系统托盘图标的应用程序应该如何表现,是否有任何标准?
我最近写了一个应用程序,它位于系统托盘的大部分生命中.我把它递给了一位朋友,她的第一直觉是双击图标进入主窗口(工作正常).但这让我思考.在.NET至少,有各种不同的事件和方式将事物附加到您的系统托盘图标(单击[左/右],双击[左/右],上下文菜单,在我的头顶).考虑一下,我用右键单击上下文菜单(大多数)来创建应用程序,左键单击会显示相同的上下文菜单(Live Messenger),一个(不同的)左键单击上下文菜单(守护程序工具),左键单击打开主窗口(很多Windows通知),左键双击打开主窗口(mIRC,许多其他应用程序).我还没有发现一个使用右键双击的应用程序,虽然我确信它是可能的......
对于您的应用程序在这些特定情况下的行为方式,是否有任何可用性指南或标准?
考虑以下程序.它显示的行为(即异常将从事件处理程序传播出来)是一个"好事"?据我所知,它只会是坏事; 意外异常从他们不应该的功能弹出.在我的特殊情况下,它是杀死线程.那么,在某些情况下,这种行为实际上是件好事吗?这是否有理由说从事件处理程序中排除异常是糟糕的设计?
static class Program {
static void Main()
{
Foo foo = new Foo();
foo.SomeEvent += ThrowException;
try
{
foo.OnSomeEvent();
}
catch (Exception)
{
// This is printed out
Console.WriteLine("Exception caught!");
}
}
static void ThrowException(object sender, EventArgs e)
{
throw new Exception();
}
}
// Define other methods and classes here
class Foo
{
public event EventHandler SomeEvent;
public void OnSomeEvent()
{
SomeEvent(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud) 我在C#程序集中有一些资源,我在其中解决
byte[] foob = Properties.Resources.foo;
byte[] barb = Properties.Resources.bar;
...
Run Code Online (Sandbox Code Playgroud)
我想迭代这些资源,而不必保留我添加的索引.有没有一种方法可以返回所有资源?
对于使用大量数据的"数字运算"风格的应用程序(读取:"数百MB,但不是GB",即它可以很好地适应操作系统旁边的内存),将所有数据读入内存是否有意义首先在开始处理之前避免在读取大型相关数据集时可能使程序IO绑定,而是从RAM中加载它们?
这个答案在使用不同的数据支持之间是否有所改变 也就是说,无论你使用的是XML文件,平面文件,完整的DBMS等,答案都是一样的吗?
int main()
{
int i,j;
for (i=1; i<=25; i++)
{
for (j=2; j<= i/2; j++)
if (!(i%j)) break;
if (j>i/2) cout << i << "\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个程序(不是我写的)输出从1到25的素数,包括1,即使1不是素数.
我遇到这条线路有问题: if (!(i%j)) break;
这是否说"不是模数i和j = 0?
GET http://stackoverflow.com/questions HTTP/1.1
Host: stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
HTTP标准是否要求GET请求以绝对或相对地址提供?请求何时在代理中呢?
我问这个是因为我觉得它与Host信息重复了.
好吧,最近,我遇到了一个有趣的问题.在潜在(实际上)无限递归序列中生成第n个值.这个特定的算法将在其成功的深度处至少10-15个堆栈引用.我的第一个想法是抛出看起来像这样的(C#)的SuccessException:
class SuccessException : Exception
{
public string Value
{ get; set; }
public SuccessException(string value)
: base()
{
Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后做这样的事情:
try
{
Walk_r(tree);
}
catch (SuccessException ex)
{
result = ex.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后我的思绪在这里徘徊,在那里我一遍又一遍地听到从未使用Exceptions进行流量控制.有没有借口?如果你要实现它,你将如何构建这样的东西呢?
c# ×5
exception ×2
.net ×1
.net-3.5 ×1
abstract ×1
algorithm ×1
appdomain ×1
c++ ×1
control-flow ×1
events ×1
graphics ×1
http ×1
inheritance ×1
interface ×1
modulo ×1
properties ×1
resources ×1
string ×1
system-tray ×1